2009-07-07 27 views
2

Ich habe eine Eigenschaft innerhalb einer Klasse, die ich durch alle möglichen eindeutigen IDs aus einer Beziehung durchlaufen muss.LinqToSql - Abrufen einer Liste verschiedener IDs aus einer verschachtelten Liste

Ich bin in einem Benutzer, der zu einem Unternehmen gehört. Unternehmen haben viele Lösungen und jede Lösung hat viele "SolutionPortals". Was ich will, ist eine Liste aller eindeutigen "PortalIds" aus den "SolutionPortal.PortalID" (SolutionPortal.PortalID), die in der DB sind.

Ich kann nicht für das Leben von mir das als eine einzige Liste bekommen. Ich erhalte:

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

Natürlich, das macht Sinn, da es eine Liste der Lösungen ist, mit einer Liste des SolutionPortals, aber ich brauche die IDS gerade aus in die eigene Liste auszuwählen.

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

Jede Hilfe wäre EXTREM geschätzt.

Dank/

Antwort

3

SelectMany ist hier der Schlüssel:

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

Sie müssen wahrscheinlich so etwas wie dieses:

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

Das brachte mich auf den richtigen Weg. Vielen Dank! Ich wusste nichts von den "SelectMany" -Erweiterungen. Sehr praktisch. –

1

Das funktionierte:

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

Dank Mehrdad!

+1

Ich schlage vor, dass Sie sich nicht zwingen, die Abfrageausdrucksyntax zu verwenden. Ich denke, das ist besser lesbar: 'var solutionIds = this.Company.Solutions.SelectMany (s => s.SolutionPortals) .Wählen (s => s.PortalID) .Distinct();' –

+0

@Mehrdad: stimme voll und ganz zu. – jason

+0

Ich stimme zu - danke! :) –

Verwandte Themen