我有一些LINQ表达式问题,OrderBy(),Skip(),Take()工作不正确

时间:2011-09-19 07:46:31

标签: linq sql-order-by skip take

我有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)Take() 3)仅排序元素!

3 个答案:

答案 0 :(得分:2)

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

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;

答案 1 :(得分:0)

你试过这个吗?

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

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);

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

答案 2 :(得分:0)

此示例中的

命令顺序并不重要。它将首先对您的数据进行排序,之后将收集您的数据。