2010-08-31 5 views
0

J'ai donc des projets (pour cet exemple, disons qu'ils sont un nom et un ID). J'ai aussi une table appelée sous-projets, comme celui-ci:Requête LINQ - Problèmes de jointure auto compliquée

 
MasterProjectID  SubProjectID 
1      2 
1      3 
4      5 
4      6 
4      7 

Un maître ne peut pas être un sous d'un autre maître.

Je veux retourner une liste d'ID de projet. Plus précisément, je souhaite que la liste contienne l'ID de projet principal et tous ses ID de sous-projets.

En d'autres termes, si ProjectID == 4 et pdc est mon DataContext, ma requête doit retourner:

 
4 
5 
6 
7 

La requête LINQ suivante ne retourne rien:

from j in pdc.Projects 
    join s in pdc.SubProjects on j.ProjectID equals s.SubProjectID 
    where j.ProjectID.Equals(projectID) || s.MasterProjectID.Equals(projectID) 
    select j.ProjectID; 

Qu'est-ce que je fais mal ?

Répondre

0

Vous pouvez récupérer une liste des sous-projets simplement avec:

var query = from j in pdc.SubProjects 
      where j.MasterProjectID == projectID 
      select j.SubProjectID; 

... Puis manuellement ajouter/précédez la valeur connue de projectID.

var list = query.ToList(); 
list.Add(projectID);