linq zu SQL: Verständnis Select
und SelectMany
Mastering Linq in SQL erfordert das Verständnis der Schlüsselunterschiede zwischen Select
und SelectMany
. Beide Projektdaten, aber ihre Ansätze unterscheiden sich erheblich.
Select
führt eine Eins-zu-Eins-Transformation durch. Es nimmt jedes Element aus einer Eingangssequenz und wendet eine Funktion an, um ein neues Element in der Ausgangssequenz zu erzeugen. Dies ist ideal, um bestimmte Eigenschaften zu extrahieren oder Berechnungen für einzelne Elemente durchzuführen.
SelectMany
hingegen verwandelt eine Sequenzsequenzen in eine einzelne Sequenz. Dies ist von unschätzbarem Wert bei der Arbeit mit hierarchischen oder verschachtelten Datenstrukturen. Sie können mehrere Ebenen durchqueren und auf die zugrunde liegenden Elemente zugreifen.
veranschaulichen wir eine Person
-Klasse mit einer Sammlung von PhoneNumber
Objekten:
<code class="language-csharp">public class PhoneNumber { public string Number { get; set; } } public class Person { public IEnumerable<PhoneNumber> PhoneNumbers { get; set; } public string Name { get; set; } }</code>
Select
Beispiel:
<code class="language-csharp">IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);</code>
Dies verwendet Select
, um eine Folge von Telefonnummernsequenzen zu erhalten - eine für jede Person. Das Ergebnis bleibt verschachtelt.
SelectMany
Beispiel:
<code class="language-csharp">IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);</code>
SelectMany
flacht die verschachtelte Struktur ab und erzeugt eine einzige Sequenz, die alle Telefonnummern aus allen Personen enthält.
Kombinieren Sie Eltern- und Kinderdaten mit SelectMany
:
Ein leistungsstarkes Merkmal von SelectMany
ist seine Fähigkeit, übergeordnete Daten in die Projektion einzubeziehen. Mit der Überlastung mit einem zweiten Parameter können Sie ein neues Objekt erstellen, das übergeordnete und untergeordnete Eigenschaften kombiniert:
<code class="language-csharp">var directory = people .SelectMany(p => p.PhoneNumbers, (parent, child) => new { parent.Name, child.Number });</code>
Dies erzeugt ein Verzeichnis, in dem der Name jeder Person und deren zugehörigen Telefonnummern aufgeführt sind. Die Ausgabe kombiniert Daten sowohl aus den Klassen Person
als auch aus PhoneNumber
.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen den Select- und Selectmany -Operatoren von Linq?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!