Я хочу иметь возможность применять комбо-сортировку 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));
}
Однако, если я попытаюсь отсортировать по DateTime
, я получу это исключение:
Невозможно привести тип System.DateTime к типу System.Object. LINQ to Entities поддерживает только приведение типов примитивов или перечислений EDM.
Что я делаю неправильно? Я использую EF5.