通用linq排序方法 - 解析表达式

时间:2009-09-08 09:29:53

标签: c# linq

我最终写了很多看起来像

的代码
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);
}

谁能告诉我怎么做?最好有一个解释,以便我能理解它。

1 个答案:

答案 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,而且这不是方法声明中的类型参数之一。以上应该可以正常工作。