Lambda overload for Skip/Take Missing

本文关键字:Take Missing Skip overload for Lambda | 更新日期: 2023-09-27 18:14:37

我正在运行一些非常简单的测试代码来查看linq查询中常量的效果,我在定位过载时遇到了麻烦…

这篇MSDN文章特别提到了skip/take的lambda重载,但是我似乎找不到它的位置。

选自《实体框架4、5和6的性能考虑》第4.2节:

"在分页时要特别注意Skip和Take的使用。在EF6中,这些方法具有lambda重载,这有效地使缓存的查询计划可重用,因为EF可以捕获传递给这些方法的变量并将其转换为sqlparameter。"

之后是下面的代码示例:

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"类型,因为它不是委托类型

我在阅读失败,或者有一个包括缺失的地方与重载扩展方法?

Lambda overload for Skip/Take Missing

您正在寻找的扩展方法是" QueryableExtensions.Skip "。它在System.Data.Entity命名空间中,在EntityFramework程序集中。