14

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

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

4

2 回答 2

19

在 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(我不知道是哪一个)。这是一个相关连接,需要APPLY在 SQL 端使用。

于 2013-05-11T20:58:57.880 回答
4

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

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 不支持 OUTER APPLY for Oracle

于 2013-05-11T21:06:25.610 回答