跳过/丢失的Lambda超载

时间:2014-07-25 03:28:59

标签: c# linq entity-framework-6

我正在运行一些非常简单的测试代码来查看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上。

1 个答案:

答案 0 :(得分:14)

您正在寻找的扩展方法是&#34; QueryableExtensions.Skip&#34;。它位于System.Data.Entity命名空间的EntityFramework程序集中。