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

entity-framework left-join linq

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

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

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

一般承认的答案

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

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

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
        }

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因