【问题标题】:I have some problems with LINQ expression, OrderBy(), Skip(), Take() works incorrect我对 LINQ 表达式有一些问题,OrderBy()、Skip()、Take() 工作不正确
【发布时间】:2011-09-19 07:46:31
【问题描述】:

我有像

这样的 LINQ 表达式
var a = ctx.EntitySet
        .OrderByDescending(t => t.Property)
        .Skip(pageIndex * size) 
        .Take(size);

OrderBy() 应该在 Skip() 和 Take() 之前调用,但排序发生在最后。我可以解决这个问题吗?

抱歉,很多人不明白我的问题。查询运行没有任何错误,但我想要

//It is I want
1) Sorting ALL data
2) Use Skip() and Take()

如果我喜欢我的示例,我会得到什么结果: 1)跳过() 2) 采取() 3) 只对已取元素进行排序!

【问题讨论】:

  • 这是正确的做法,实际问题是什么?
  • 由于查询看起来很好,您可以传递生成的 sql 查询,因为它看起来很好。 weblogs.asp.net/scottgu/archive/2007/07/31/…
  • 如果你得到了你想要的信息,不要忘记将答案标记为已接受
  • 代码示例对我有用,它先订购集合,然后跳过数量,然后取正确的数量。

标签: linq sql-order-by skip take


【解决方案1】:

我不知道为什么,但不知何故对我有用,希望对你有帮助

var a1 = from p in ctx.EntitySet
        .OrderByDescending(t => t.Property)
        select p;

var a2 = from p in a1
        .Skip(pageIndex * size) 
        .Take(size)
        select p;

【讨论】:

    【解决方案2】:

    你试过了吗

    如果您选择以下解决方案,它将首先获取记录,然后对可能导致错误结果的记录进行排序。

    var a = ctx.EntitySet
            .Skip(pageIndex * size) 
            .Take(size);
    
    a = a.OrderByDescending(t => t.Property);
    

    按照你首先进行排序然后获取记录的方式,所以通过这种方式你可以获得你想要的结果,这是正确的做法

       var a = ctx.EntitySet
        .OrderByDescending(t => t.Property)
        .Skip(pageIndex * size) 
        .Take(size);
    

    但它总是取决于你的要求你想要什么......

    【讨论】:

      【解决方案3】:

      此示例中的命令命令并不重要。它会先对您的数据进行排序,然后再收集您的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 2011-04-09
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多