2009-07-07 10 views
2

J'ai une propriété dans une classe, que j'ai besoin d'itérer à travers tous les ID distincts possibles d'une relation.LinqToSql - Obtention d'une liste d'ID distincts à partir d'une liste imbriquée

Je suis dans un utilisateur, qui appartient à une société. Les entreprises ont de nombreuses solutions et chaque solution a de nombreux "SolutionPortals". Qu'est-ce que je veux, est une liste de tous les "PortalIds" distincts de la "SolutionPortals" (SolutionPortal.PortalID) qui sont dans la base de données.

Je ne peux pas pour la vie de moi obtenir comme une seule liste. Je continue à recevoir:

var solutionIds = from s in this.Company.Solutions.Select(s=>s.SolutionPortals) 
        select s.Select(sp=> sp.PortalID); 

Bien sûr, cela est logique, car il y a une liste de solutions, avec une liste de SolutionPortals, mais je dois sélectionner uniquement sur l'IDS dans leur propre liste.

IEnumerable<IEnumerable<int>> // <-- Don't want this 
IEnumerable<int> // <-- I want this 

Toute aide serait EXTRÊMEMENT appréciée.

Merci/

Répondre

3

SelectMany est la clé ici:

var solutionIds = this.Company 
         .Solutions 
         .SelectMany(s=>s.SolutionPortals) 
         .Select(sp => sp.PortalId) 
         .Distinct(); 
2

Vous devez probablement quelque chose comme ceci:

var listOfIds = listOfSolutionPortals.SelectMany(sps => sps.Solutions) 
            .Select(sp => sp.PortalId); 
+0

Cela m'a mis sur la bonne voie. Merci! Je ne connaissais pas les extensions "SelectMany". Très utile. –

1

Cela a fonctionné:

var solutionIds = (from s in this.Company.Solutions 
        .SelectMany(s => s.SolutionPortals) 
        select s.PortalID).Distinct(); 

Merci Mehrdad!

+1

Je suggère de ne pas vous forcer à utiliser la syntaxe d'expression de requête. Je pense que ceci est plus lisible: 'var solutionIds = this.Company.Solutions.SelectMany (s => s.Portals) .Select (s => s.PortalID) .Distinguable();' –

+0

@Mehrdad: Complètement d'accord. – jason

+0

Je suis d'accord - merci! :) –

Questions connexes