2009-01-26 8 views
15

Are Select et SelectMany préférable aux jointures?LinqToSQL Select et SelectMany vs Join

La raison pour laquelle je me demande est parce que j'utilise LINQPad et dans une section, il y a des commentaires qui disent:

// 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! 

Pourtant, dans d'autres sections, il montre clairement que les jointures sont plus rapides (au moins pour les exemples donné dans LinqPad) et pour moi, ils sont plus faciles à visualiser dans ma tête. Peut-être que je ne comprends pas bien puisque je ne regarde que les exemples de code et pas le livre, mais j'ai vu d'autres personnes recommander Select et SelectMany plutôt que des joints.

Répondre

15

Le Weblog Wayward avait this to say à ce sujet. Join utilise un ensemble explicite de paramètres pour se joindre à une clé spécifique et autorise les jointures externes gauche et droite. SelectMany effectue un monadic bind qui aboutit généralement à une jointure interne ou à une jointure croisée. Comme LINQ est essentiellement une implémentation de la programmation fonctionnelle dans .NET, le SelectMany est l'expression la plus naturelle; Cependant, la configuration explicite de l'association aboutit à des actions plus rapides. Quant à préféré, je pense que tout ce qui vous lit le plus clairement est le meilleur. Le C# version of 101 LINQ Samples n'inclut pas Join, mais le VB list montre Join et SelectMany utilisés dans différents scénarios.

+0

Merci, bonne réponse et lien. A en juger par les non-réponses, je suppose qu'il n'y a vraiment pas de différence énorme sur laquelle devrait être utilisé. – dtc