Me gustaría añadir una cosa más. En LINQ to SQL si su base de datos está construida correctamente y sus tablas están relacionadas a través de restricciones de clave externa, entonces no necesita hacer una combinación en absoluto.
Usando LINQPad I crean los siguientes LINQ consulta:
//Querying from both the CustomerInfo table and OrderInfo table
from cust in CustomerInfo
where cust.CustomerID == 123456
select new {cust, cust.OrderInfo}
que fue traducido a la consulta (ligeramente truncada) por debajo de
-- Region Parameters
DECLARE @p0 Int = 123456
-- EndRegion
SELECT [t0].[CustomerID], [t0].[AlternateCustomerID], [t1].[OrderID], [t1].[OnlineOrderID], (
SELECT COUNT(*)
FROM [OrderInfo] AS [t2]
WHERE [t2].[CustomerID] = [t0].[CustomerID]
) AS [value]
FROM [CustomerInfo] AS [t0]
LEFT OUTER JOIN [OrderInfo] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID]
WHERE [t0].[CustomerID] = @p0
ORDER BY [t0].[CustomerID], [t1].[OrderID]
Aviso la LEFT OUTER JOIN
anteriormente.
LINQ to Entities no reconoce el método DefaultIfEmpty ... –
¿Puede alguien explicar cómo funciona esta sintaxis loca? No veo cómo una de esas palabras clave mágicamente la convierte en una combinación de la izquierda. ¿Qué hace el "into sr"? Linq me frustra a veces :) –
@JoePhillips Tengo mucha experiencia SQL, pero tratar de aprender LINQ es como vadear barro. Estoy de acuerdo, es absolutamente loco. –