我最终写了很多看起来像
的代码var ordered = isDescending ? queryable.OrderByDescending(x => x.ID) : queryable.OrderBy(x => x.ID)
但使用不同的表达式,例如x => x.DateOfBirth等我想做的是将它放在我可以解析表达式的泛型扩展方法中,并将布尔值降为,但我不知道如何做到这一点。像
这样的东西public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> source, Expression<Func<T, TKey>> func, bool isDescending) {
return isDescending ? source.OrderByDescending(func) : source.OrderBy(func);
}
谁能告诉我怎么做?最好有一个解释,以便我能理解它。
答案 0 :(得分:4)
你几乎就在那里 - 你只是缺少一个类型参数:
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);
}
您的代码以前没有用,因为func
参数的类型使用了TKey
,而且这不是方法声明中的类型参数之一。以上应该可以正常工作。