В проводке я увидел следующую функцию, которая позволяет упорядочивать данные, используя обобщенное выражение:
public static IOrderedQueryable<T> OrderBy<T, TKey>(
this IQueryable<T> source, Expression<Func<T, TKey>> func, bool isDescending) {
return isDescending ? source.OrderByDescending(func) : source.OrderBy(func);
}
Когда я пытаюсь использовать эту функцию, я получаю сообщение об ошибке: «Тип или имя пространства имен« TKey »не может быть найдено (вы пропустили директиву using или ссылку на сборку?)». Я делаю что-то тупое здесь но я не могу понять это.
Edit:
Пройдя еще немного исследований, я думаю, что моя проблема в том, чтобы построить выражение, которое я передам в него. Можно ли построить выражение, которое может содержать разные типы? Допустим, у моего набора данных есть строка, int и bool, и я хочу использовать описанную выше универсальную функцию для сортировки по любому из элементов. Как мне это сделать?
У меня сейчас работает:
if (IsString)
{
Expression<Func<T, string>> expString = ...;
// call orderBy with expString
}
else if (IsInt)
{
Expression<Func<T, int>> expInt;
// call orderBy w/ expInt
}
:
Я хочу что-то вроде:
Expression<Func<T, {something generic!}>> exp;
if (IsString)
exp = ...;
else if (IsInt)
exp = ...;
:
// call orderBy with exp