13

from2つの句を使用して結合を作成することと次のwhereようなものとの違いは何ですか?

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

join結合演算子を使用してを記述します。

これはjoin2つのテーブルの場合ですが、もちろん、さらに多くのテーブルを結合する必要があり、上記の構文を選択した場合は、他のfrom句を組み合わせる必要があります。where

両方の構文クエリが同じデータを返すことは知っていますが、パフォーマンスの違い、または別の種類の違いがあり、最終的に一方の構文が他方よりも優先されるのではないかと考えていました。

あなたの提案をありがとう。

4

2 に答える 2

19

この質問は、実際にはこれら2つでかなりうまく答えられています。

INNER JOIN ON と WHERE 句

INNER JOIN と "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]

左外部結合:

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]

式が SQL にどのように変換されるかをテストしたい場合は、LINQPadを試すことをお勧めします。この種のものを理解するための素晴らしいツールです。

于 2012-07-31T22:39:26.670 に答える