Подтвердить что ты не робот

Возможно ли внешнее соединение с Linq to Entity Framework

Существует множество примеров внешнего соединения с использованием Linq to Sql, все из которых находятся на DefaultIfEmpty(), которые не поддерживаются Linq в Entity Framework.

Означает ли это, что внешнее соединение невозможно с Linq to Entity с использованием .NET 3.5 (я понимаю, что DefaultIfEmpty идет с 4.0 --- но это не вариант в это время для меня)

Может ли кто-нибудь предложить краткий пример использования Linq для EntityFramework.

4b9b3361

Ответ 1

В LINQ to Entities, думайте в терминах отношений, а не SQL-соединений. Следовательно, буквальный эквивалент внешнего соединения SQL для объекта Person с отношением один к нулю или одним отношением к CustomerInfo будет:

var q = from p in Context.People
        select new
        {
            Name = p.Name,
            IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
        };

L2E будет объединять соединение, так что если CustomerInfo имеет значение null, то все выражение оценивается как null. Следовательно, приведение к обнуляемому bool, потому что предполагаемый тип не-nullable bool не смог сохранить этот результат.

Для одного-ко-многим обычно требуется иерархия, а не плоский набор результатов в стиле SQL:

var q = from o in Context.Orders
        select new 
        {
            OrderNo = o.OrderNo,
            PartNumbers = from od in o.OrderDetails
                          select od.PartNumber
        }

Это похоже на левое соединение, поскольку вы по-прежнему получаете заказы без каких-либо подробностей, но это граф как OO, а не такой набор, как SQL.