我希望能够firstby / thenby
按如下方式应用组合排序:
allOrders().sort(s => s.ProductName, s => s.OrderDate)
所以以这篇文章为灵感,我写了这个扩展方法,编译得很好:
public static IQueryable<T> sort<T>(this IQueryable<T> entities, params
Expression<Func<T, object>>[] predicates) where T : class
{
var sorted = entities.OrderBy(predicates[0]);
for (int i = 1; i < predicates.Length; i++)
sorted = sorted.ThenBy(predicates[i]);
return sorted;
}
而且我还尝试了这个简洁的版本,它也可以编译:
public static IQueryable<T> sort<T>(this IQueryable<T> entities, params
Expression<Func<T, object>>[] predicates) where T : class
{
return predicates.Skip(1).Aggregate(
entities.OrderBy(predicates[0]),
(aggregate, currentPredicate) => aggregate.ThenBy(currentPredicate));
}
但是,如果我尝试按 a 排序,则会DateTime
收到此异常:
无法将类型“System.DateTime”转换为类型“System.Object”。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
我究竟做错了什么?我正在使用 EF5。