2012-07-31 22 views
6

cuál es la diferencia entre escribir una unión por medio de 2 from cláusulas y una where así:LINQ to SQL se une con múltiples cláusulas de la sintaxis tradicional vs. sintaxis de unión

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

y escribir un join utilizando la unen operador.

Esto es para un join en 2 mesas pero, por supuesto, a veces, necesitamos unir aún más tablas y tenemos que combinar otras cláusulas from con where si elegimos la sintaxis anterior.

Sé que las dos consultas de sintaxis devuelven los mismos datos, pero me preguntaba si hay una diferencia de rendimiento u otro tipo de diferencia que favorezca definitivamente una sintaxis sobre la otra.

Gracias por sus sugerencias.

Respuesta

9

Esta pregunta se responde bastante bien en estos dos.

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

He incluido dos ejemplos de cómo tres expresiones diferentes LINQ se traducirán en SQL.

implícito de Ingreso:

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

serán traducidos al

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

combinación interna:

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

serán traducidos al

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

combinación externa izquierda:

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 } 

serán traducidos al

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

Si desea probar cómo sus expresiones se traducirán en SQL, recomiendo que intenta LINQPad . Es una herramienta increíble para descubrir este tipo de cosas.

+0

¿Qué hay mejor? 2 o más de cláusulas o 2 o más cláusulas de unión? – frenchie

+0

De acuerdo con http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line la cláusula join es preferible. –

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