Wann Joins, die mit SelectMany () ausgedrückt werden, gegenüber Joins, die mit dem Join-Schlüsselwort in Linq ausgedrückt werden, bevorzugt werden sollen

8

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?

    
Nico 26.10.2010, 16:46
quelle

2 Antworten

6

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.

    
Ahmad Mageed 26.10.2010, 18:01
quelle
2

Join ist effizienter, es verwendet die Lookup-Klasse (eine Variante des Dictionary mit mehreren Werten für einen einzelnen Schlüssel), um übereinstimmende Werte zu finden.

    
Athari 26.10.2010 17:03
quelle

Tags und Links