Это проблемный код:
var distinctCatNames = allCats.Select(c => c.CatName).Distinct();
if (skip.HasValue) distinctCatNames = distinctCatNames .Skip(skip.Value);
if (take.HasValue) distinctCatNames = distinctCatNames .Take(take.Value);
var distinctCatNameList= distinctCatNames .ToList();
Если вы представляете, что у меня есть список из 100 кошек, я хочу выбрать 10 различных имен. Он входит в список подкачки, поэтому он должен использовать пропустить и принять.
Вышеуказанное не будет работать, потому что его нужно заказать с помощью OrderBy.
Если я поместил OrderBy после явного, я не могу выполнить Skip и Take, потому что результатом является IOrderedQueryable, а не IQueryable (ошибка компилятора).
Если я делаю это раньше, ошибка говорит, DbSortClause expressions must have a type that is order comparable.
Мне нужно убедиться, что под капотом он правильно переводит мой запрос, потому что может быть много кошек, поэтому я хочу, чтобы он генерировал SQL, который включает в себя пропуски/взятие запроса, а не получение ВСЕХ кошек, а затем их выполнение это коллекция.
Есть идеи?
Вам нужно заказать элементы, но затем просто введите переменную, которую вы храните в качестве IQueryable
, а не IOrderedQueryable
:
var distinctCatNames = allCats.Select(c => c.CatName)
.Distinct()
.OrderBy(name => name)
.AsQueryable();
<facepalm>
. Надеемся, что linq для сущностей не подойдет для преобразования и все равно будет работать хорошо. Благодарю.
DbSortClause expressions must have a type that is order comparable.