1361 Stimmen

Unterschied zwischen Select und SelectMany

Ich habe nach dem Unterschied zwischen Select y SelectMany aber ich habe keine passende Antwort gefunden. Ich muss den Unterschied bei der Verwendung von LINQ To SQL lernen, aber alles, was ich gefunden habe, sind Standard-Array-Beispiele.

Kann jemand ein LINQ To SQL-Beispiel zur Verfügung stellen?

9 Stimmen

Sie können sich den Code für SelectMany mit einer Funktion oder mit zwei Funktionen ansehen referencesource.microsoft.com/#System.Core/System/Linq/

1 Stimmen

Wenn Sie mit Kotlin vertraut sind, hat es ganz ähnliche Implementierungen für Sammlungen wie map aka C# Select und flatMap aka C# SelectMany. Grundsätzlich Kotlin std Bibliothek Erweiterung Funktionen für Sammlungen hat Ähnlichkeit mit C # Linq Bibliothek.

0 Stimmen

Würde man zustimmen, dass SelectFromMany wäre ein viel beschreibenderer Name als SelectMany ?

5voto

Matt Klein Punkte 7076

Nur für eine alternative Sichtweise, die einigen funktionalen Programmierern da draußen helfen könnte:

  • Select es map
  • SelectMany es bind (oder flatMap für Ihre Scala/Kotlin-Leute)

4voto

RickL Punkte 3108

Ohne zu technisch zu werden - Datenbank mit vielen Organisationen, jede mit vielen Benutzern:-

var orgId = "123456789";

var userList1 = db.Organizations
                   .Where(a => a.OrganizationId == orgId)
                   .SelectMany(a => a.Users)
                   .ToList();

var userList2 = db.Users
                   .Where(a => a.OrganizationId == orgId)
                   .ToList();

beide kehren zurück derselbe ApplicationUser-Liste für die ausgewählte Organisation.

Die erste "projiziert" von Organisation auf Benutzer, die zweite fragt direkt die Tabelle Benutzer ab.

4voto

Eric Bole-Feysot Punkte 12201

Es ist klarer, wenn die Abfrage eine Zeichenfolge (ein Array von Zeichen) zurückgibt:

Wenn die Liste "Früchte" zum Beispiel "Apfel" enthält

Select' gibt die Zeichenkette zurück:

Fruits.Select(s=>s) 

[0]: "apple"

SelectMany' glättet die Zeichenkette:

Fruits.SelectMany(s=>s)

[0]: 97  'a'
[1]: 112 'p'
[2]: 112 'p'
[3]: 108 'l'
[4]: 101 'e'

4voto

Betrachten Sie dieses Beispiel:

        var array = new string[2]
        {
            "I like what I like",
            "I like what you like"
        };
        //query1 returns two elements sth like this:
        //fisrt element would be array[5]  :[0] = "I" "like" "what" "I" "like"
        //second element would be array[5] :[1] = "I" "like" "what" "you" "like"
        IEnumerable<string[]> query1 = array.Select(s => s.Split(' ')).Distinct();

        //query2 return back flat result sth like this :
        // "I" "like" "what" "you"
        IEnumerable<string> query2 = array.SelectMany(s => s.Split(' ')).Distinct();

Wie Sie sehen, wurden doppelte Werte wie "I" oder "like" aus Abfrage 2 entfernt, da "SelectMany" mehrere Sequenzen zusammenfasst und projiziert. Aber query1 gibt eine Folge von String-Arrays zurück. Und da es zwei verschiedene Arrays in query1 gibt (erstes und zweites Element), würde nichts entfernt werden.

0 Stimmen

Wahrscheinlich ist es besser, jetzt .Distinct() am Ende einzufügen und anzugeben, dass es "ich" "mag" "was" "ich" "mag" "ich" "mag" "was" "du" "magst" ausgibt

3voto

snr Punkte 15782

El SelectMany Methode schlägt eine IEnumerable<IEnumerable<T>> in eine IEnumerable<T> Wie im Kommunismus werden alle Elemente gleich behandelt (ein dummer Mensch hat die gleichen Rechte wie ein genialer Mensch).

var words = new [] { "a,b,c", "d,e", "f" };
var splitAndCombine = words.SelectMany(x => x.Split(','));
// returns { "a", "b", "c", "d", "e", "f" }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X