【发布时间】:2009-09-10 19:30:35
【问题描述】:
我在一篇帖子中看到了以下函数,它允许使用通用表达式对数据进行排序:
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 指令或程序集引用?)”。我在这里做一些愚蠢的事情但我想不通。
编辑:
在做了更多研究之后,我认为我的问题在于构建我传递给它的表达式。是否可以构建一个可以包含不同类型的表达式?假设我的数据集有一个字符串、一个 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
【问题讨论】:
-
这看起来不错。你是如何使用这种方法的?您是否将其添加到静态类中?