Wenn ich eine Variable vom Typ IEnumerable<List<string>>
habe, gibt es eine LINQ-Anweisung oder einen Lambda-Ausdruck, der die Listen zusammenfasst, die eine IEnumerable<string>
zurückgeben?Kombinieren von Listen in Lambda/LINQ
Antwort
Select - das heißt
IEnumerable<List<string>> someList = ...;
IEnumerable<string> all = someList.SelectMany(x => x);
Für jedes Element in someList, das verwendet dann das Lambda "x => x", um einen IEnumerable <T> für die inneren Elemente. In diesem Fall ist jedes "x" eine Liste <T>, die bereits IEnumerable <T> ist.
Diese werden dann als zusammenhängender Block zurückgegeben. Im Wesentlichen ist SelectMany etwas wie (vereinfacht):
Obwohl das etwas vereinfacht ist.
Nicht gerade ein einzelner Methodenaufruf, aber Sie sollten
var concatenated = from list in lists from item in list select item;
Wo ‚Listen‘ schreiben können ist Ihr IEnumerable<List<string>>
und verketteten vom Typ IEnumerable<string>
.
(Technisch diese ist ein einzelner Methodenaufruf SelectMany
-. Es sieht einfach nicht wie es war ich von der Öffnung Aussage gemeint Ich wollte nur, dass bis löschen, falls jemand hätte verwirrt oder kommentiert - ich erkennen, nachdem ich gepostet hatte, wie es gelesen haben könnte).
Machen Sie eine einfache Methode. Keine Notwendigkeit für LINQ:
IEnumerable<string> GetStrings(IEnumerable<List<string>> lists)
{
foreach (List<string> list in lists)
foreach (string item in list)
{
yield return item;
}
}
Mit LINQ Ausdruck ...
IEnumerable<string> myList = from a in (from b in myBigList
select b)
select a;
... funktioniert gut. :-)
b
wird ein IEnumerable<string>
sein und a
wird ein string
sein.
Hier ist ein weiteres LINQ-Abfrageverständnis.
IEnumerable<string> myStrings =
from a in mySource
from b in a
select b;
Wie wäre es
myStrings.SelectMany(x => x)
gute Lösung, mit kleinem Tippfehler –
Danke. Aktualisiert den Tippfehler – JaredPar
Und keinen Grund, es nicht zu benutzen, wenn Sie 3.5 verwenden .NET (die wir aus dem OP annehmen kann) oder C# 3.0 mit .NET 2.0 und LinqBridge. –
@Marc: Du hast recht, besonders wenn es einen einfachen "linqish" Weg gibt. Manchmal versuchen die Leute einfach etwas auf LINQ-Art zu tun und machen einfache Dinge schwerer zu verstehen. – VVS