C# 6.0 in Kürze von Joseph Albahari und Ben Albahari (O'Reilly).Linq Select und SelectMeines Ausführen von Joins
Copyright 2016 Joseph Albahari und Ben Albahari, 978-1-491-92706-9.
Enthüllt in Kapitel 9 die Linq-Operatoren. Für jede Operation, z. B. Filtern, Projizieren, Verbinden usw., werden die in System.Linq verfügbaren Erweiterungsmethoden aufgelistet, um die betreffende Operation auszuführen.
Auf Seite 394, es handelt sich um Projizieren:
Projizieren (Input:
IEnumerable<TSource>
→ Output:IEnumerable<TResult>
)Transformiert jedes Element mit einer Lambda-Funktion. SelectMany flacht verschachtelte Sequenzen ab;
Select
undSelectMany
zuführen inneren verbindet, links äußere Verknüpfungen, Quer verbindet, und nicht-equi verbindet sich mit LINQ to SQL und EF:Linq API: Select, Select
Intuitiv ihre viel einfacher zu sehen, wie entspricht dem Beitritt in relationalen Datenbanken, aber was ist mit Select
allein? Ich bin mir nicht sicher, ob ich sehe, wie Select alleine irgendeine Verbindung eingehen kann.
Könnte es sein, dass der einzige Fall, in dem Select
etwas tut, das entspricht einem Join wie
IEnumerable<TInput> input = ...
input.Select(new [SomeType] { a = input.a + c, b = input.a + d };
ist es dann gesagt werden könnte, dass diese Projection
implizit eine Beziehung zwischen Typ TInput
und SomeType
, und somit ist die Definition darstellt ein Beitritt? Habe ich recht ?
Nein ist nicht wie Beitritt. Wählen Sie viele ist, wenn Sie ein mehrdimensionales Array haben und das select many ein inneres Array verwendet und alle Elemente in die nächsthöhere Dimension des mehrdimensionalen Arrays bewegt. Wenn Sie also eine zweidimensionale Tabelle haben, wird eine Auswahl viele alle Zeilen der Tabelle aufnehmen und zu einem einzigen eindimensionalen Array machen. – jdweng
@jdweng: thanskf für Ihre Eingabe, aber Sie haben gerade erklärt, was technisch eine SelectMany tut. Was ich wusste.Da der Autor Select und SelectMany mit Join verbindet, versuche ich zu erklären, wie sich diese Operatoren auf den Beitritt beziehen. Wie bereits erwähnt, ist SelectMany intuitiver, da die Beziehung zwischen Bestell- und Kauftabellen in eine Klassenbestellung mit einer Liste von Einkäufen übersetzt werden kann. In einer Liste von Aufträgen wird das Ausführen einer SelectMany on Purchases das tun, was Sie beschreiben - wir sind uns alle einig - aber der Punkt der Frage besteht darin, zu analysieren, wo/wie diese Operationen einen Join ausführen (in diesem Beispiel ist es – Veverke
) einfach zu sehen, wie/wo. Select allein ist nicht so intuitiv. – Veverke