Je voudrais ajouter une chose. Dans LINQ to SQL si votre base de données est correctement construite et que vos tables sont liées par des contraintes de clé étrangère, vous n'avez pas besoin de faire de jointure du tout.
En utilisant LINQPad J'ai créé la requête LINQ suivante:
//Querying from both the CustomerInfo table and OrderInfo table
from cust in CustomerInfo
where cust.CustomerID == 123456
select new {cust, cust.OrderInfo}
Ce qui a été traduit à la requête (légèrement tronquée) ci-dessous
-- 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]
Notez que le LEFT OUTER JOIN
ci-dessus.
LINQ to Entities ne reconnaît pas la méthode DefaultIfEmpty ... –
Quelqu'un peut-il expliquer comment fonctionne cette syntaxe folle? Je n'arrive pas à voir comment l'un de ces mots clés en fait une jointure gauche. Que fait le "dans sr"? Linq me frustre parfois :) –
@JoePhillips J'ai beaucoup d'expérience SQL, mais essayer d'apprendre LINQ, c'est comme patauger dans la boue. Je suis d'accord que c'est complètement fou. –