【发布时间】:2013-05-06 05:51:58
【问题描述】:
我想为 Entity Framework 查询创建一些测试用例,这些查询肯定会生成包含 CROSS APPLY 或 OUTER APPLY 运算符的 SQL 命令。
有人可以展示出现此类 SQL 查询的典型场景吗?
【问题讨论】:
标签: sql sql-server entity-framework cross-apply outer-apply
我想为 Entity Framework 查询创建一些测试用例,这些查询肯定会生成包含 CROSS APPLY 或 OUTER APPLY 运算符的 SQL 命令。
有人可以展示出现此类 SQL 查询的典型场景吗?
【问题讨论】:
标签: sql sql-server entity-framework cross-apply outer-apply
在 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。
【讨论】:
这样的事情会产生一个外部应用:
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
【讨论】: