我正在运行一些非常简单的测试代码来查看linq查询中常量的效果,并且我无法找到重载...
This MSDN article特别提到了skip / take的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表达式转换为&#39; int&#39;因为它不是委托类型
我是否在阅读失败,或者是否存在包含重载扩展方法的地方?我在EF 6.1.1上。
答案 0 :(得分:14)
您正在寻找的扩展方法是&#34; QueryableExtensions.Skip
&#34;。它位于System.Data.Entity
命名空间的EntityFramework程序集中。