Mit den folgenden linq und Lambda-Ausdrücke, was ist der beste Ansatz für die Verbindung von zwei Datensätze mit mehreren Join-Bedingungen? Alle Abfragen erzeugen identische Ergebnisse.Der beste Ansatz für den Beitritt zu zwei Datensätzen
var q1 = (from t1 in table1
from y in table2
where t1.ColumnName == y.ColumnName
&& t1.ColumnName2 == y.ColumnName2
select t1).ToList();
var q2 = (from t1 in table1
join y in table2 on new { Key1 = t1.ColumnName, Key2 = t1.ColumnName2 }
equals new { Key1 = y.ColumnName, Key2 = y.ColumnName2 }
select t1).ToList();
var q3 = table1.Join(table2,
t1 => new { Key1 = t1.ColumnName, Key2 = t1.ColumnName2 },
y => new { Key1 = y.ColumnName, Key2 = y.ColumnName2 },
(t1, y) => new { t1 }).ToList();
Zum Spaß habe ich meine Abfragen in drei Unit-Tests getrennt. Ich fügte eine Stoppuhr hinzu, um die Ausführung jedes Tests zeitlich zu bestimmen. Mit dem Code in Release jeden Test ergab folgende Ergebnisse
Q1: Abgelaufene: 2500 Zecken
Q2: Abgelaufene: 11381 Zecken
Q3: Abgelaufene: 2406 Zecken
Diese Ergebnisse sind überraschend zu mich. Kann jemand erklären?
Ist die Quer führen verbinden schlimmer dann die innere Verknüpfung. Ist der einzige Unterschied in der Lesbarkeit? –
@DarthPaper Viel schlimmer. Kartesisches Produkt, weißt du? –