2012-07-31 14 views
6

Co różnica między pisania sprzężenia za pomocą 2 from klauzule i where tak:LINQ-SQL łączy się z wieloma z klauzul składnia vs. tradycyjny dołączyć składnia

var SomeQuery = from a in MyDC.Table1 
       from b in MyDC.Table2 
       where a.SomeCol1 == SomeParameter && a.SomeCol2 === b.SomeCol1 

i pisanie join pomocą przyłączyć operator.

To jest dla join na 2 stołach, ale oczywiście, czasami musimy dołączyć jeszcze więcej tabel i musimy połączyć inne klauzule from z where, jeśli wybierzemy powyższą składnię.

Wiem, że oba zapytania składniowe zwracają te same dane, ale zastanawiałem się, czy istnieje różnica w wydajności lub inna różnica, która ostatecznie faworyzuje jedną składnię względem drugiej.

Dzięki za sugestie.

Odpowiedz

9

To pytanie jest w rzeczywistości bardzo dobre.

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

podaję dwa przykłady, w jaki sposób trzy różne wyrażenia LINQ będą tłumaczone na język SQL.

niejawny dołączyć:

from prod in Articles 
from kat in MainGroups 
where kat.MainGroupNo == prod.MainGroupNo 
select new { kat.Name, prod.ArticleNo } 

będą tłumaczone na język

SELECT [t1].[Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0], [dbo].[MainGroup] AS [t1] 
WHERE [t1].[MainGroupNo] = [t0].[MainGroupNo] 

INNER JOIN:

from prod in Articles 
join kat in MainGroups on prod.MainGroupNo equals kat.MainGroupNo 
select new { kat.Name, prod.ArticleNo } 

będą tłumaczone na język

SELECT [t1].[Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0] 
INNER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] 

Lewy sprzężenie zewnętrzne:

from prod in Articles 
join g1 in MainGroups on prod.MainGroupNo equals g1.MainGroupNo into prodGroup 
from kat in prodGroup.DefaultIfEmpty() 
select new { kat.Name, prod.ArticleNo } 

będą tłumaczone na język

SELECT [t1].[Name] AS [Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0] 
LEFT OUTER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] 

Jeśli chcesz sprawdzić, jak twoi wyrażenia będą tłumaczone na język SQL, polecam wypróbowanie LINQPad . To niesamowite narzędzie do określania tego rodzaju rzeczy.

+0

Co jest lepsze? 2 lub więcej z klauzul lub 2 lub więcej klauzul przyłączyć? – frenchie

+0

Zgodnie z http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line klauzula join wydaje się bardziej pożądana. –

-2
var result = from a in DB.classA 
from b in DB.classB 
where a.id.Equals(b.id) 
select new{a.b};