【问题标题】:Is an outer join possible with Linq to Entity Framework是否可以使用 Linq to Entity Framework 进行外部连接
【发布时间】:2009-11-20 13:58:59
【问题描述】:

有很多使用 Linq to Sql 进行外连接的示例,它们都依赖于 DefaultIfEmpty(),而 Linq to Entity Framework 不支持。

这是否意味着使用 .NET 3.5 的 Linq to Entity 无法进行外部连接(我知道 DefaultIfEmpty 将与 4.0 一起提供 --- 但目前这对我来说不是一个选项)

谁能提供一个使用 Linq to EntityFramework 的简洁示例。

【问题讨论】:

    标签: linq entity-framework left-join


    【解决方案1】:

    在 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。因此,强制转换为可空 bool,因为推断的不可空 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 中您会考虑对象之间的关系而不是表之间的关系,但我没有想到这一点。真是大开眼界……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多