2011-07-08 14 views
9

Estaba trabajando con el primer método a continuación, pero luego encontré el segundo y quiero saber la diferencia y cuál es la mejor.La mejor manera de unirse a Linq

¿Cuál es la diferencia entre:

from a in this.dataContext.reglements 
join b in this.dataContext.Clients on a.Id_client equals b.Id 
select... 

y

from a in this.dataContext.reglements 
from b in this.dataContext.Clients 
where a.Id_client == b.Id 
select... 

Respuesta

6

he creado un caso de prueba para probar la diferencia, y en su scenerio resulta que son los mismos.

Mi ejemplo de prueba utilizado AdventureWorks pero básicamente hay una asociación entre

Productos-> CategoryId-> Categorías

var q = (
    from p in Products 
    from c in Categories 
     where p.CategoryID==c.CategoryID 
    select p 
); 

q.ToList(); 

Produce este SQL:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID] 
    FROM [Products] AS [t0], [Categories] AS [t1] 
WHERE [t0].[CategoryID] = ([t1].[CategoryID]) 

var q2 = (
    from p in Products 
    join c in Categories 
     on p.CategoryID equals c.CategoryID 
    select p); 

q2.ToList(); 

Produce este SQL:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID] 
FROM [Products] AS [t0] 
INNER JOIN [Categories] AS [t1] ON [t0].[CategoryID] = ([t1].[CategoryID]) 
+0

Uso LinqToSQL – Akrem

+0

¿No se traduciría el segundo a una unión de estilo ANSI? ¿Por qué se haría en la memoria? Ese es un SQL válido también, ¿no? –

+0

¿Está seguro de esto? No hay ninguna razón en particular para que L2S no pueda generar una cláusula 'FROM' de varias partes en SQL. –

Cuestiones relacionadas