2009-01-26 4 views
15

Są wybierane i wybierane? Wiele preferowanych połączeń?LinqToSQL Select and SelectMany vs Join

Powodem Zastanawiam się tak dlatego używam LINQPad iw jednym punkcie są komentarze, które mówią:

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

Jednak w innych sekcjach jasno pokazuje, że łączy się szybciej (przynajmniej na przykładach podane w LinqPad) i dla mnie są łatwiejsze do wizualizacji w mojej głowie.

Być może jestem nieporozumieniem, ponieważ przeglądam tylko próbki kodu, a nie książkę, ale widziałem innych ludzi, którzy polecają także opcję Wybierz i Zaznacz wiele nad połączeniami.

Odpowiedz

15

The Wayward Weblog miał this to say w tej sprawie. Join używa jawnie określonego zestawu parametrów, aby dołączyć do określonego klucza i pozwala na lewe i prawe połączenie zewnętrzne. SelectMany wykonuje monadic bind, co zwykle skutkuje złączeniem wewnętrznym lub łączeniem krzyżowym. Ponieważ LINQ jest zasadniczo implementacją programowania funkcjonalnego w .NET, SelectMany jest bardziej naturalnym wyrażeniem; jednak wyraźna konfiguracja łączenia prawdopodobnie spowoduje szybsze działania.

Jeśli chodzi o preferowane, myślę, że cokolwiek czyta najlepiej dla ciebie najlepiej. Numer C# version of 101 LINQ Samples nie obejmuje łączenia, ale VB list pokazuje opcje łączenia i wyboru używane w różnych sytuacjach.

+0

Dziękuję, dobra odpowiedź i link. Sądząc z braku odpowiedzi, zakładam, że tak naprawdę nie ma ogromnej różnicy, która powinna zostać wykorzystana. – dtc