2009-01-26 16 views
15

Sind Select und SelectMany lieber Joins?LinqToSQL Select und SelectMany vs Join

Der Grund, warum ich frage mich ist, weil ich LinqPad verwenden und es gibt Kommentare in einem Abschnitt, die sagen:

// Note: before delving into this section, make sure you've read the preceding two 
// sections: Select and SelectMany. The Join operators are actually unnecessary 
// in LINQ to SQL, and the equivalent of SQL inner and outer joins is most easily 
// achieved in LINQ to SQL using Select/SelectMany and subqueries! 

Doch in anderen Abschnitten es zeigt deutlich, dass schließt sich schneller (zumindest für die Beispiele gegeben in LinqPad) und für mich sind sie leichter in meinem Kopf zu visualisieren.

Vielleicht bin ich Missverständnis, da ich nur durch die Codebeispiele schaue und nicht das Buch, aber ich habe gesehen, dass andere Leute Select und SelectMany über Joins auch empfehlen.

Antwort

15

Die Wayward Weblog hatte this to say in Bezug auf die Angelegenheit. Join verwendet einen expliziten Satz von Parametern, um einen bestimmten Schlüssel zu verknüpfen, und ermöglicht linke und rechte äußere Joins. SelectMany führt eine monadic bind aus, die im Allgemeinen entweder zu einem inneren Join oder Cross-Join führt. Da LINQ im Wesentlichen eine Implementierung der funktionalen Programmierung in .NET ist, ist SelectMany der natürlichere Ausdruck; Die explizite Einrichtung des Joins führt jedoch wahrscheinlich zu schnelleren Aktionen.

Als bevorzugt, ich denke, was auch immer liest Ihnen am besten ist am besten. Die C# version of 101 LINQ Samples enthält keine Join, aber die VB list zeigt Join und SelectMany in verschiedenen Szenarien verwendet.

+0

Vielen Dank, gute Antwort und Link. Nach den Nichtantworten gehe ich davon aus, dass hier wirklich kein großer Unterschied besteht. – dtc