У меня проблемы с выражением LINQ, OrderBy(), 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) Skip() 2) Take() 3) Сортировка только взятых элементов!


person DraggonZ    schedule 19.09.2011    source источник
comment
Это правильный способ сделать это, в чем проблема?   -  person cjk    schedule 19.09.2011
comment
Поскольку запрос выглядит нормально, вы можете передать сгенерированный запрос sql, поскольку в том виде, в котором он написан, он выглядит нормально. weblogs.asp.net/ Скоттгу/архив/31.07.2007/   -  person James Manning    schedule 26.09.2011
comment
Не забудьте пометить ответ как принятый, если вы получили нужную информацию   -  person Pranay Rana    schedule 27.09.2011
comment
у меня сработал пример кода, он сначала заказал набор, потом пропустил количество, а потом взял правильное количество.   -  person Marcel Valdez Orozco    schedule 05.03.2012


Ответы (3)


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

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;
person Nima Derakhshanjan    schedule 19.08.2014

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

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

var a = ctx.EntitySet
        .Skip(pageIndex * size) 
        .Take(size);

a = a.OrderByDescending(t => t.Property);

or

Следуя тому, как вы сначала выполняете сортировку, а затем получаете записи, таким образом, вы можете получить желаемый результат, это правильный способ сделать

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

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

person Pranay Rana    schedule 19.09.2011

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

person Mostafa Soghandi    schedule 16.06.2013