Я пытаюсь создать общий метод поиска, который может выполнять поиск различными способами, как по возрастанию, так и по убыванию.
Основа:
IQueryable<MyModel> query = nhSession.Query<MyModel>();
Мой вопрос заключается в том, могу ли я каким-либо образом абстрагироваться от вызова OrderBy против OrderByDescending, поэтому мне не нужно делать это if-ветвление для каждой опции упорядочения, которую я хочу поддерживать (упрощено до одного столбца, но может быть более сложнымупорядочения, включая ThenBy)?
if (orderAscending)
query = query.OrderBy(x => x.SomeProperty);
else
query = query.OrderByDescending(x => x.SomeProperty);
В идеале я хочу что-то вроде этого (псевдокод) с использованием делегатов, лямбда-функций или аналогичных, но не могу заставить что-то работать:
var filterFunc = orderAscending ? query.OrderBy : query.OrderByDescending;
query = filterFunc(query, x => x.SomeProperty);
или
query = query.Order(x => x.SomeProperty, orderAscending);
Я бы предпочел не использовать QueryOver, если это возможно, поскольку существует много другого кода, уже использующего вызовы vanilla LINQ.Я также пробовал .Reverse (), но, похоже, это не поддерживается поставщиком NH LINQ.
Невозможно получить весь список и перевернуть его в памяти, так как мне нужно тольконапример, извлеките верхние 100 из десятков тысяч строк.