Linq到实体框架是否可以进行外部连接

Linq到实体框架是否可以进行外部连接,linq,entity-framework,left-join,Linq,Entity Framework,Left Join,有许多使用Linq到Sql的外部联接示例,它们都是基于DefaultIfEmpty(),这是Linq到实体框架不支持的 这是否意味着使用.NET3.5的LINQtoEntity不可能进行外部连接(我知道DefaultIfEmpty将随4.0一起提供,但目前我不能选择) 有人能提供一个使用Linq-to-EntityFramework的简明示例吗。在Linq-to-Entities中,考虑的是关系而不是SQL连接。因此,实体Person上与CustomerInfo具有一对零或一关系的SQL外部联接

有许多使用Linq到Sql的外部联接示例,它们都是基于
DefaultIfEmpty()
,这是Linq到实体框架不支持的

这是否意味着使用.NET3.5的LINQtoEntity不可能进行外部连接(我知道DefaultIfEmpty将随4.0一起提供,但目前我不能选择)


有人能提供一个使用Linq-to-EntityFramework的简明示例吗。

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

var q = from p in Context.People
        select new
        {
            Name = p.Name,
            IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
        };
L2E将合并联接,因此如果CustomerInfo为null,则整个表达式的计算结果为null。因此,强制转换为可为null的bool,因为推断出的不可为null的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的集合。

这正是我想要的高质量答案。非常感谢。谢谢你的提示。当有人这样解释它时,它突然变得如此明显,以至于在L2E中,你想到的是对象之间的关系,而不是表之间的关系,但我没有想到。真让人大开眼界。。。