Как я могу пропустить и взять объекты, пока у меня не будет 10 различных объектов в LINQ to Entities?

1

Это проблемный код:

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, который включает в себя пропуски/взятие запроса, а не получение ВСЕХ кошек, а затем их выполнение это коллекция.

Есть идеи?

Теги:
linq-to-entities

1 ответ

4
Лучший ответ

Вам нужно заказать элементы, но затем просто введите переменную, которую вы храните в качестве IQueryable, а не IOrderedQueryable:

var distinctCatNames = allCats.Select(c => c.CatName)
    .Distinct()
    .OrderBy(name => name)
    .AsQueryable();
  • 0
    <facepalm> . Надеемся, что linq для сущностей не подойдет для преобразования и все равно будет работать хорошо. Благодарю.
  • 0
    Хм, та же ошибка. DbSortClause expressions must have a type that is order comparable.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню