Linq to Entity Framework是否可以进行外连接

Ral*_*ton 18 linq entity-framework left-join

有很多使用Linq到Sql的外连接的例子,所有DefaultIfEmpty()这些都是Linq to Entity Framework不支持的.

这是否意味着Linq to Entity使用.NET 3.5无法实现外连接(我知道DefaultIfEmpty将带有4.0 ---但这对我来说不是一个选项)

有人可以使用Linq to EntityFramework提供一个简明的例子.

Cra*_*ntz 36

在LINQ to Entities中,考虑关系而不是SQL连接.因此,Person具有一到零或一个关系的实体上的SQL外连接的字面等价物CustomerInfo将是:

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

L2E将合并连接,因此如果CustomerInfo为null,则整个表达式的计算结果为null.因此,铸造成可空的布尔,因为推断类型的非可空博尔无法保持这种结果.

对于一对多,您通常需要层次结构,而不是平面的SQL样式结果集:

var q = from o in Context.Orders
        select new 
        {
            OrderNo = o.OrderNo,
            PartNumbers = from od in o.OrderDetails
                          select od.PartNumber
        }
Run Code Online (Sandbox Code Playgroud)

这就像左连接,因为你仍然得到没有细节的订单,但它是像OO的图形而不是像SQL这样的集合.

  • 这正是我想要的那种高质量的答案.谢谢! (2认同)