Делаю для апишки пагинацию и фильтрацию. К сожалению, я не хотел использовать такой вариант, с работой обобщенных запросов, но от безысходности приходится писать что-то лично мне не совсем понятное. Кое как, нашел варианты и подстроил под себя для "сортировки по", но сейчас проблема заключается в "поиску по":
public static Expression<Func<T, object>> ToLambda<T>(string propertyName)
{
var parametr = Expression.Parameter(typeof(T));
var property = Expression.Property(parametr, propertyName);
var propObject = Expression.Convert(property, typeof(object));
return Expression.Lambda<Func<T, object>>(propObject, parametr);
}
public static IQueryable<T> ApplyOrdering<T>(this IQueryable<T> source,
string propertyName, bool desc = false)
{
return desc != true ?
source.OrderBy(ToLambda<T>(propertyName))
: source.OrderByDescending(ToLambda<T>(propertyName));
}
public static IQueryable<T> ApplySearching<T>(this IQueryable<T> source,
string propertyName, string input)
{
return source.Where(ToLambda<T>(propertyName) == input);
}
ApplySearching -> я бы это делал так, если бы делал напрямую через какой-то сервис-контроллер: where(x=>x.propNAME == "xxx"). Но в обобщенной этой функции у меня ошибка => "System.Linq.Expressions.Expression>' to 'System.Func'"