Czy istnieje składnia C # LINQ dla metody Queryable.SelectMany ()?

88

Podczas pisania zapytania przy użyciu składni C # LINQ, czy istnieje sposób użycia metody Queryable.SelectMany ze składni słowa kluczowego?

Dla

string[] text = { "Albert was here", 
                  "Burke slept late", 
                  "Connor is happy" };

Używając płynnych metod, mogłem zapytać

var tokens = text.SelectMany(s => s.Split(' '));

Czy istnieje składnia zapytania podobna do

var tokens = from x in text selectmany s.Split(' ')
BrianCooksey
źródło
przykład wymaga pewnych ulepszeń ... ale podejrzewam, że zawiera podstawowy punkt widzenia. Zapraszam do sugerowania lepszych przykładów.
BrianCooksey

Odpowiedzi:

126

Tak, wystarczy powtórzyć klauzulę from ... in:

var words = from str in text
            from word in str.Split(' ')
            select word;
driis
źródło
4
@BCooksey - Tak ... ponieważ wybierasz z kolekcji zagnieżdżonej w pierwszym wyniku.
Justin Niessner
3
Wszystkie te wywołania mogą być obsługiwane przez SelectMany, który jest niezwykle elastyczny, ale kompilator wybierze między Select, SelectMany, a nawet bez żadnej transformacji, w zależności od formy zapytania
Sprague
23

Możesz użyć związku z klauzuli :

var tokens = from s in text
             from x in s.Split(' ')
             select x;
dtb
źródło