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を使用しています。