我在一篇帖子中看到了以下函数,它允许使用通用表达式对数据进行排序:
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指令或程序集引用?)”。我在这里做了一些蠢事,但我想不出来。
编辑:
经过更多的研究,我认为我的问题在于构建传递给它的Expression。是否可能构建包含不同类型的表达式?假设我的数据集有一个字符串、一个整数和一个布尔值,我想使用上面的通用函数按任何项排序。我该怎么做呢?
我现在已经解决了这个问题:
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