【发布时间】:2014-07-25 03:28:58
【问题描述】:
我正在运行一些非常简单的测试代码来查看 linq 查询中常量的影响,但我无法找到重载...
This MSDN article 特别提到了跳过/拍摄的 lambda 重载,但我似乎找不到它。
来自Performance Considerations for Entity Framework 4, 5, and 6 的第 4.2 节:
“在进行分页时特别注意使用 Skip 和 Take。在 EF6 中,这些方法具有 lambda 重载,有效地使缓存的查询计划可重用,因为 EF 可以捕获传递给这些方法的变量并将它们转换为 SQL 参数。 "
他们遵循此代码示例:
var customers = context.Customers.OrderBy(c => c.LastName);
for (var i = 0; i < count; ++i)
{
var currentCustomer = customers.Skip(() => i).FirstOrDefault();
ProcessCustomer(currentCustomer);
}
我的测试代码:
for(int i = 0; i<100; i++)
{
var result = dc.Products
//.Select(p => p.Name)
.OrderBy(p => p.Name)
.Skip(() => i)
.ToList();
}
错误:无法将 lambda 表达式转换为类型“int”,因为它不是委托类型
是我阅读失败,还是在重载扩展方法的某个地方缺少包含?我在 EF 6.1.1 上。
【问题讨论】:
标签: c# linq entity-framework-6