【问题标题】:Lambda overload for Skip/Take MissingSkip/Take Missing 的 Lambda 重载
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 太棒了 - 谢谢!我的谷歌技能在那个方面让我失望了,我开始认真地怀疑我的阅读技能。将接受几个答案 - 只是等待计时器:)
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 2018-02-03
    • 2018-03-05
    • 2012-06-12
    • 2016-11-10
    • 2011-11-13
    • 1970-01-01
    • 2017-05-30
    相关资源
    最近更新 更多