Моя цель - поддержать сортировку в приложении и предоставить его через REST API, который будет принимать параметр в виде строки.
Текущая реализация имеет следующие черты:
GetUsers (Expression<Func<User, int>> sortExpression) {
// Retrieve users ...
return users.orderBy(sortExpression);
}
Usage example:
var users = GetUsers(u => u.Id);
Expression<Func<User, int>> sortExpression
широко используется в нашем хранилище, и изменить его будет сложно.
Я хотел бы поменять u => u.Id
с чем-то, что генерируется во время выполнения.
То, что у меня пока есть:
// sortBy is retrieved from the calling method.
var type = typeof(User).GetProperties().FirstOrDefault(x => x.Name == sortBy).GetType();
var sortExpression = Expression.Property(Expression.Parameter(typeof(User)), sortBy);
var parameter = Expression.Parameter(typeof(User));
var expressionBody = Expression.Lambda(typeof(Func<User, int>), sortExpression, parameter);
var users = GetUsers(expressionBody)
Я могу видеть во время выполнения, что это создает выражение, которое соответствует моим потребностям, но ошибка составляет Argument 5: cannot convert from 'LambdaExpression' to 'Expression<System.Func<User, int>>'
, хотя тело выражения должно быть установлено typeof(Func<User, int>)