У меня есть запрос LINQ, который построен по частям, например так:
var initialQuery = from item in MyContext where xxx == yyy select item;
var furtherQuery = from item in initialQuery where bla == foo select new { some stuff };
// more code here...
// eventually:
var yetAnotherQuery = (from item in furtherQuery ...)
.OrderBy(my_condition);
// As far as I know, the following query should still maintain the order of the previous one
// see: /765432/garantiruytsya-li-podzaprosy-v-linqtosql-v-tom-zhe-poryadke-chto-i-ih-roditel
var stillAnotherQuery = (from item in yetAnotherQuery
select item.data_I_care_about)
.Distinct();
// And finally...
var finalQuery = stillAnotherQuery.Skip(PageIndex).Take(PageSize);
Но я получаю исключение, когда вызывается Skip()
, говоря, что запрос не упорядочен!Очевидно, что то, что указано в моем комментарии к коду выше и вопрос , на который есть ссылка *1006*, не совсем верно.Фактически другой ответ SO указывает на то, что сохранение этого порядка не гарантируется.
Кто-нибудь знает хороший способ сделать то, что я пытаюсь выполнить?
IРассматривается просто включение ROW_NUMBER
в мои промежуточные результаты и упорядочение по ним в самом конце, но я не могу найти способ получить это ROW_NUMBER
в моих результатах через LINQ.
Я видел несколько другие SO вопросы пытаются получить ROW_NUMBER там, но, насколько я видел, они все клиентские.
Мне кажется,нарисовал себя в углу.Кто-нибудь знает (LINQ-friendly) выход?
ОБНОВЛЕНИЕ
Некоторые предлагали мне сделать Distinct()
до OrderBy()
.Я полагаю, что это дало бы мне другие результаты.
Представьте, что у меня есть эта таблица данных
myRank | myData
-------+--------
3 | A
1 | B
2 | A
Предположим, я заказываю по myRank
, а данные, которые меня интересуют, - myData
и представьте, что мой оригинальный код был таким:
var query = from item in MyTable
select item;
query = query.OrderBy(item => item.myRank);
var derivedQuery = from item in query // Note: we throw away myRank
select item.myData;
derivedQuery = derivedQuery.Distinct();
Если я поменяю местами порядок OrderBy()
и Distinct()
, я получу разные результаты.Я не хочу, чтобы myRank
был включен в Distinct()
.
Извините, это часть гораздо более масштабного процесса, поэтому трудно разобраться во всех подробностях этого вопроса.
Но, надеюсь, это имеет смысл?