2012-07-31 8 views
6

Was ist der Unterschied zwischen einem mit 2 from Klauseln schriftlich verbinden und ein where wie folgt aus:Linq-to-SQL-Joins mit mehreren von Klauseln Syntax im Vergleich zu herkömmlichen Join-Syntax

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

und Schreiben einer join mit dem Join Operator.

Dies ist für eine join auf 2 Tische aber natürlich manchmal, brauchen wir noch mehr Tabellen verknüpfen, und wir müssen mit where anderen from Klauseln kombinieren, wenn wir die Syntax oben wählen.

Ich weiß, dass beide Syntaxabfragen die gleichen Daten zurückgeben, aber ich frage mich, ob es einen Leistungsunterschied oder eine andere Art von Unterschied gibt, die eine Syntax gegenüber der anderen abschließend begünstigen würde.

Vielen Dank für Ihre Vorschläge.

Antwort

9

Diese Frage wird eigentlich in diesen beiden ziemlich gut beantwortet.

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

ich zwei Beispiele auf eingeschlossen haben, wie werden drei verschiedene LINQ Ausdrücke in SQL übersetzt werden.

Implizite beitreten:

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

Wird in

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

Inner übersetzt beitreten:

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

Wird in

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

LEFT OUTER JOIN:

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 } 

Wird in

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

übersetzt Wenn Sie testen wollen, wie Ihre Ausdrücke in SQL übersetzt werden, empfehle ich, dass Sie LINQPad versuchen . Es ist ein großartiges Werkzeug, um diese Art von Sachen herauszufinden.

+0

Also was ist besser? 2 oder mehr aus Klauseln oder 2 oder mehr Join-Klauseln? – frenchie

+0

Laut http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line scheint die Join-Klausel vorzuziehen. –

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