После этого вопроса: Метод расширения OrderBy для NPoco.Linq
и, следовательно, этот вопрос: Естественная сортировка с Dynamic Linq, включающая несколько параметров сортировки
Как выглядит OrderBy с компаратором для NPOCO?Я пытался сопоставить ответы, чтобы создать его сам, но мне не удалось преобразовать Expression.Call с компаратором в Invoke.Я пробовал это до сих пор безрезультатно:
public static IQueryProvider<T> OrderByField<T, ComparerType>(this IQueryProvider<T> queryProvider, IComparer<ComparerType> comparer, string SortField, bool ascending)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, SortField);
string methodName = ascending ? "OrderBy" : "OrderByDescending";
Expression conversion = Expression.Convert(prop, typeof(object));
LambdaExpression lambda = Expression.Lambda(conversion, param);
try
{
object result = typeof(IQueryProvider<T>).GetMethods().Single(
method => method.Name == methodName)
.Invoke(queryProvider, new object[] { comparer, lambda });
return (IQueryProvider<T>)result;
}
catch(Exception exc)
{
return null;
}
}