Я хотел бы добавить еще одну вещь. В LINQ to SQL, если ваша БД правильно построена, а ваши таблицы связаны с ограничениями внешнего ключа, то вам вообще не нужно делать соединение.
Использование LINQPad Я создал следующий запрос LINQ:
//Querying from both the CustomerInfo table and OrderInfo table
from cust in CustomerInfo
where cust.CustomerID == 123456
select new {cust, cust.OrderInfo}
который был переведен на несколько (усеченный) запрос ниже
-- 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]
Обратите внимание на LEFT OUTER JOIN
выше.
LINQ to Entities не распознает метод DefaultIfEmpty ... –
Может кто-нибудь объяснить, как работает этот сумасшедший синтаксис? Я не вижу, как любое из этих слов волшебным образом делает его левым соединением. Что делает «в sr»? Linq иногда меня разочаровывает :) –
@JoePhillips У меня много опыта SQL, но попытка узнать LINQ - это как пробираться сквозь грязь. Я согласен, что это абсолютно безумно. –