2012-07-31 22 views
6

:linq-to-sql hükümlerinden birden çok ile birleştiği sözdizimi vs geleneksel sözdizimi katılmak 2 <code>from</code> maddeleri kullanarak katılmak yazma arasındaki fark ve bunun gibi bir <code>where</code> Ne

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

ve yazma join kullanarak katılmak Şebeke.

Bu

bir join 2 tablolar için ama tabii ki, bazen biz bile daha tabloları katılması gerekir ve biz yukarıdaki sözdizimi seçerseniz where ile diğer from maddelerini birleştirmek gerekir.

Her iki sözdizimi sorgusunun da aynı verileri döndürdüğünü biliyorum, ancak bir diğerinin üzerinde bir söz dizimi lehine sonuçlanacak bir performans farkı veya başka bir çeşit farklılık olup olmadığını merak ediyorum.

Önerileriniz için teşekkür ederiz.

cevap

9

Bu soru aslında bu ikisinde oldukça iyi cevaplandırılmıştır.

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

Üç farklı LINQ ifadeleri SQL çevrilecektir nasıl iki örnek verdim. Örtülü

katılmak:

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

katılmak

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

İç Çeviri olacak:

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

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

dış Sol katılmak: Eğer ifadeleri SQL çevrilecektir nasıl test etmek isterseniz

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 } 

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

Çeviri olacak, sana LINQPad denemenizi tavsiye . Bu tür şeyleri anlamak için harika bir araç.

+0

Peki, daha iyi olan nedir? 2 veya daha fazla maddeden veya 2 veya daha fazla birleştirme cümlesi? – frenchie

+0

http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line adresinde birleştirme maddesi tercih edilir. –

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