LinqToSQL Select и SelectMany vs Join
Являются ли Select и SelectMany предпочтительными для присоединения?
Причина, по которой мне интересно, заключается в том, что я использую LinqPad, и в одном разделе есть комментарии, которые говорят:
// 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!
Тем не менее, в других разделах это ясно показывает, что соединения быстрее (по крайней мере, для примеров, приведенных в LinqPad), и для меня их легче визуализировать в моей голове.
Возможно, я ошибаюсь, так как я просматриваю образцы кода, а не книгу, но я видел, как другие люди рекомендуют Select и SelectMany поверх Joins.
Ответы
Ответ 1
The Wayward Weblog это сказать по этому вопросу. Join использует явный набор параметров для присоединения к определенному ключу и позволяет использовать левое и правое внешние соединения. SelectMany выполняет монадическое связывание, которое обычно приводит к внутреннему соединению или перекрестному соединению. Поскольку LINQ по существу является реализацией функционального программирования в .NET, SelectMany является более естественным выражением; однако явная настройка соединения, вероятно, приводит к более быстрым действиям.
Что касается предпочтительного, я думаю, что все, что читает наиболее четко, лучше всего. С# версия 101 LINQ Samples не включает Join, но VB список показывает Join и SelectMany, используемые в разных сценариях.