跳过/丢失的Lambda超载

Kel*_*ron 7 c# linq entity-framework-6

我正在运行一些非常简单的测试代码来查看linq查询中常量的影响,而我找不到重载...

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

实体框架4,5和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);
}
Run Code Online (Sandbox Code Playgroud)

我的测试代码:

for(int i = 0; i<100; i++)
{
    var result = dc.Products
                 //.Select(p => p.Name)
                   .OrderBy(p => p.Name)
                   .Skip(() => i)
                   .ToList();
}
Run Code Online (Sandbox Code Playgroud)

错误:无法将lambda表达式转换为类型'int',因为它不是委托类型

我是否在阅读失败,或者是否存在包含重载扩展方法的地方?我在使用EF 6.1.1.

por*_*ges 15

您正在寻找的扩展方法是" QueryableExtensions.Skip".它位于System.Data.EntityEntityFramework程序集中的命名空间中.