Ich habe den Unterschied zwischen Select
und gesucht, SelectMany
aber ich konnte keine passende Antwort finden. 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 bereitstellen?
c#
linq-to-sql
linq
Tarik
quelle
quelle
Antworten:
SelectMany
glättet Abfragen, die Listen von Listen zurückgeben. Zum BeispielLive-Demo auf .NET Fiddle
quelle
Viele auswählen ist wie eine Cross-Join-Operation in SQL, bei der das Cross-Produkt verwendet wird.
Zum Beispiel, wenn wir haben
Wählen Sie viele aus, um den folgenden Satz zu erhalten
Beachten Sie, dass wir hier alle möglichen Kombinationen nehmen, die aus den Elementen von Satz A und Satz B gemacht werden können.
Hier ist ein LINQ-Beispiel, das Sie ausprobieren können
Die Mischung hat folgende Elemente in flacher Struktur wie
quelle
SelectMany
ist . Dies ist eher ein Weg, derSelectMany
verwendet werden kann, aber eigentlich nicht der normale Weg, ihn zu verwenden.Where
nach SelectMany...
quelle
SelectMany()
Mit dieser Option können Sie eine mehrdimensionale Sequenz so reduzieren, dass andernfalls eine SekundeSelect()
oder eine Schleife erforderlich wäre .Weitere Details in diesem Blogbeitrag .
quelle
Es gibt mehrere Überlastungen
SelectMany
. Mit einer davon können Sie jede Beziehung zwischen Eltern und Kindern verfolgen, während Sie die Hierarchie durchlaufen.Beispiel : Angenommen, Sie haben die folgende Struktur :
League -> Teams -> Player
.Sie können problemlos eine flache Sammlung von Spielern zurückgeben. Sie können jedoch jegliche Bezugnahme auf das Team verlieren, zu dem der Spieler gehört.
Glücklicherweise gibt es eine Überlastung für diesen Zweck:
Das vorherige Beispiel stammt aus Dans IK-Blog . Ich empfehle Ihnen dringend, einen Blick darauf zu werfen.
quelle
Ich verstehe
SelectMany
, wie eine Verknüpfung zu arbeiten.Also kannst du:
quelle
.SelectMany(c => new {c.CompanyName, c.Orders.ShippedDate});
würde nicht funktionieren. SelectMany reduziert die Liste der Listen eher - und Sie können eine (jeweils nur eine) der enthaltenen Listen für das Ergebnis auswählen. Zum Vergleich: Inner Join in Linq .Select ist eine einfache Eins-zu-Eins-Projektion vom Quellelement zum Ergebniselement. Select-Many wird verwendet, wenn ein Abfrageausdruck mehrere from-Klauseln enthält: Jedes Element in der ursprünglichen Sequenz wird zum Generieren einer neuen Sequenz verwendet.
quelle
Einige SelectMany sind möglicherweise nicht erforderlich. Unter 2 Abfragen erhalten Sie das gleiche Ergebnis.
Für 1-zu-viele-Beziehung,
quelle
Ohne zu technisch zu werden - Datenbank mit vielen Organisationen, jede mit vielen Benutzern: -
Beide geben dieselbe ApplicationUser-Liste für die ausgewählte Organisation zurück.
Das erste "Projekte" von Organisation zu Benutzer, das zweite fragt die Benutzertabelle direkt ab.
quelle
Es ist klarer, wenn die Abfrage eine Zeichenfolge (ein Array von Zeichen) zurückgibt:
Zum Beispiel, wenn die Liste 'Früchte' 'Apfel' enthält.
'Select' gibt die Zeichenfolge zurück:
'SelectMany' glättet die Zeichenfolge:
quelle
Nur für eine alternative Ansicht, die einigen funktionalen Programmierern da draußen helfen kann:
Select
istmap
SelectMany
istbind
(oderflatMap
für Ihre Scala / Kotlin Leute)quelle
Betrachten Sie dieses Beispiel:
Wie Sie sehen, wurden doppelte Werte wie "I" oder "Gefällt mir" aus query2 entfernt, da "SelectMany" mehrere Sequenzen abflacht und projiziert. Aber query1 gibt eine Folge von String-Arrays zurück. und da es in query1 zwei verschiedene Arrays gibt (erstes und zweites Element), wird nichts entfernt.
quelle
Ein weiteres Beispiel, wie SelectMany + Select verwendet werden kann, um Subarray-Objektdaten zu akkumulieren.
Angenommen, wir haben Benutzer mit ihren Telefonen:
Jetzt müssen wir die BaseParts aller Telefone aller Benutzer auswählen:
quelle
usersArray.SelectMany(ua => ua.Phones.Select(p => p.BasePart))
Hier ist ein Codebeispiel mit einer initialisierten kleinen Sammlung zum Testen:
quelle
Die
SelectMany
Methode schlägtIEnumerable<IEnumerable<T>>
einIEnumerable<T>
und wie der Kommunismus verhält sich jedes Element gleich (ein dummer Kerl hat die gleichen Rechte wie ein Genie).quelle
Es ist der beste Weg zu verstehen, denke ich.
Beispiel für eine Multiplikationstabelle.
quelle