О, мне кажется, я вижу проблему.
В Expression.Call третий аргумент требует для вызова статического метода универсального типа аргументов.
Queryable.OrderBy()
имеет две перегрузки:
public static System.Linq.IOrderedQueryable<TSource> OrderBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
и
public static System.Linq.IOrderedQueryable<TSource> OrderBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
Но вместо предоставления
TSource
и bool
в качестве аргументов,вы даете это
TSource
и string
в качестве аргументов.
Так должно быть:
expression = Expression.Call(
typeof(Queryable),
"OrderBy",
new[] { typeof(TSource), typeof(bool) },
expression,
lambda);
(Или вы можететакже используйте source.ElementType для первого типа.)