2012-07-31 8 views
6

LINQツーSQLが句から複数と結合構文対伝統的な構文参加2つの<code>from</code>句を使用して参加書くの違いと、このような<code>where</code>何

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

と書き込みjoin使用が参加オペレーター。

これは2つのテーブルでjoinの場合ですが、もちろんさらに多くのテーブルに参加する必要がある場合は、from句をwhereと組み合わせる必要があります。

は、私は両方の構文クエリが同じデータを返す知っているが、性能差、または決定的に他の上で1つの構文を好むだろう違いの別の種類、ありますかと思いまして。

ご意見ありがとうございます。

答えて

9

この質問は実際にこれらの二つにかなり良い答えています。

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

私は、3つの異なるLINQ式はSQLに変換する方法の2つの例を含めました。暗黙

参加:

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

が参加

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

インナーに変換されます:

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

に翻訳されます
SELECT [t1].[Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0] 
INNER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] 

左外部結合:

はあなたの式はSQLに変換する方法をテストしたい場合は、私はあなたがLINQPadを試すことをお勧めします

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

に変換されます

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 } 
。この種のものを理解するための素晴らしいツールです。

+0

何が良いでしょうか? 2つ以上の節または2つ以上の結合節? – frenchie

+0

http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-lineによると、結合節が望ましいようです。 –

-2
var result = from a in DB.classA 
from b in DB.classB 
where a.id.Equals(b.id) 
select new{a.b}; 
関連する問題