2010-08-06 5 views
2

Je suis nouveau à la terminologie Linq et SQL - quelqu'un peut-il me dire pourquoi cela ne fonctionne pas (la syntaxe n'est pas correcte - je ne peux pas comparer u.UserID int avec un Enumerable)Linq imbriqué - où x == enumerable

var projectUsers = from u in SimpleRepository.All<User>() 
        where u.UserID == (from i in SimpleRepository.All<ProjectUser>() 
             where i.ProjectID == p.ProjectID 
             select i.UserID) 
        select u; 

Dans « anglais », ce serait nous «sélectionnez tous les utilisateurs, où leur carte d'identité correspond à l'un (userID de la collection ProjectUser où projectID == x) et donnez-moi une collection d'utilisateurs ». J'utilise aussi subsonic3 avec un SimpleRepository si cela fait une différence (ou me permet d'utiliser autre chose pour faciliter cela).

+0

S'il vous plaît définir "ne fonctionne pas". –

Répondre

2
var projectUsers = from u in SimpleRepository.All<User>() 
       where (from i in SimpleRepository.All<ProjectUser>() 
            where i.ProjectID == p.ProjectID 
            select i.UserID).Contains(u.UserID) 
       select u; 

ou

var projectUsers = from u in SimpleRepository.All<User>() 
       join u2 in SimpleRepository.All<ProjectUser>() on u.UserID equals u2.UserId 
       where u2.ProjectID == p.ProjectID 
       select u; 
+0

comment testons-nous les expressions linq comme celle ci-dessus puisque nous ne faisons pas référence à SimpleRepository & autres objets? – SoftwareGeek

+1

@SoftwareGeek: je ne les ai pas testés en fait: -S mais si je le faisais - alors je vais juste créer une liste d'entiers et faire quelque chose de proche du testé. N'êtes-vous pas d'accord que cela n'a pas d'importance si nous utilisons LINQ avec des objets ou des entiers? – zerkms

+0

Merci zerkms, j'ai appris un peu de googler la terminologie dans le deuxième exemple. –