【问题标题】:Entity Framework and CROSS/OUTER APPLY实体框架和交叉/外部应用
【发布时间】:2013-05-06 05:51:58
【问题描述】:

我想为 Entity Framework 查询创建一些测试用例,这些查询肯定会生成包含 CROSS APPLY 或 OUTER APPLY 运算符的 SQL 命令。

有人可以展示出现此类 SQL 查询的典型场景吗?

【问题讨论】:

    标签: sql sql-server entity-framework cross-apply outer-apply


    【解决方案1】:

    在 LINQ 2 SQL 中,这总是导致 APPLY:

    from t1 in tab1
    from t2 in tab2.Where(t2 => t2.SomeCol == t1.SomeCol).Take(1)
    select new { t1, t2 }
    

    在 EF 中,这要么失败,要么导致 APPLY(我不知道是哪一个)。这是一个相关连接,它需要在 SQL 端使用 APPLY

    【讨论】:

    • 谢谢!这给了我一个 CROSS APPLY 查询。此外,如果我使用 Take(2).DefaultIfEmpty(),则会创建一个 OUTER APPLY 查询。
    【解决方案2】:

    这样的事情会产生一个外部应用:

    var ListLocation = from d in dc.Department                               
                             select new DepartmentViewModel()
                             {
                                LocationID = d.LocationID,
                                ManagerName = d.Managers.FirstOrDefault(p => p.ManagerId == id).Name
    
                              };
    

    如果它不起作用,如果您使用的是 EF,您可以随时传递自己的查询:

    var q2 = context.Departments.SqlQuery("Select ...");
    

    请记住,尽管您的提供程序必须是 SQL Server 2005 或更高版本,但 EF 不支持 Oracle 的 OUTER APPLY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多