Linq ermöglicht das Ausdrücken innerer Joins mithilfe des Join-Schlüsselworts oder mithilfe von SelectMany () (d. H. Ein paar von Schlüsselwörtern) mit einem Schlüsselwort wo:
%Vor%Meine Frage: Wann ist es sinnvoll, den Join-Stil zu verwenden und wann den Where-Style zu verwenden? hat einen Stil Leistungsvorteile gegenüber dem anderen Stil?
Bei lokalen Abfragen ist Join
effizienter, da die Suche nach Schlüsseln wie folgt erfolgt: Athari erwähnt , aber für LINQ to SQL (L2S) erhalten Sie mehr Laufleistung von SelectMany
. In L2S verwendet ein SelectMany
letztendlich abhängig von der Abfrage eine Art von SQL-Join im generierten SQL.
Schauen Sie sich die Fragen 11 & amp; 12 von das LINQ-Quiz von Joseph / Ben Albahari, Autoren von C # 4.0 in Kürze. Sie zeigen Beispiele für verschiedene Arten von Joins und geben an:
Mit LINQ to SQL SelectMany-basiert Joins sind am flexibelsten und können Führen Sie sowohl Equi- als auch Non-Equi-Joins durch. Werfen Sie DefaultIfEmpty, und Sie können mach auch linke Outer Joins!
Darüber hinaus hat Matt Warren einen ausführlichen Blogbeitrag zu diesem Thema, da er sich auf IQueryable
/ SQL bezieht: LINQ: Erstellen eines IQueryable-Anbieters - Teil VII .
Zurück zu Ihrer Frage, welche zu verwenden ist, sollten Sie die Abfrage verwenden, die lesbarer ist und Ihnen erlaubt, sich leicht auszudrücken und Ihr Endziel klar zu konstruieren. Leistung sollte keine erste Sorge sein, es sei denn, Sie haben mit großen Sammlungen zu tun und haben beide Ansätze profiliert. In L2S müssen Sie die Flexibilität berücksichtigen, die Ihnen SelectMany
bietet, je nachdem, wie Sie Ihre Daten paaren müssen.