У меня есть некоторые проблемы с выражением LINQ, OrderBy (), Skip (), Take () работает некорректно - PullRequest
5 голосов
/ 19 сентября 2011

У меня есть выражение 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) Сортировка только взятых элементов!

Ответы [ 3 ]

2 голосов
/ 19 августа 2014

я не знаю почему, но как-то это работает для меня, надеюсь, это поможет вам

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;
0 голосов
/ 16 июня 2013

командных порядков в этом примере не имеет значения Сначала он отсортирует ваши данные, после чего они будут собраны.

0 голосов
/ 19 сентября 2011

вы пробовали это

если вы выберете решение ниже, оно сначала получит записи, а затем отсортирует их, что может привести к неверному результату.

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

Но от твоего требования всегда зависит, чего ты хочешь ...

...