У меня есть метод, который я хочу использовать для сортировки списка:
private static IQueryable<T> BuildQuery<T>(IQueryable<T> query,
string methodName,
Expression<Func<T, object>> property)
{
var typeArgs = new[] { query.ElementType, property.Body.Type };
methodCall = Expression.Call(typeof (Queryable),
methodName,
typeArgs,
query.Expression,
property);
return query.Provider.CreateQuery<T>(methodCall);
}
Я получаю исключение, когда выполняю код, используя следующие аргументы:
var myPreExistingQuery = new List<SomeType>{ new SomeType() }.AsQueryable();
var query = BuildQuery(myPreExistingQuery, "OrderBy", x => x.SomeProperty);
Исключение:
No method 'OrderBy' on type 'System.Linq.Queryable' is compatible with the supplied arguments.
Может ли кто-нибудь увидеть, что я здесь не хватает?
РЕДАКТИРОВАТЬ:
Я попробовал другую перегрузку Expression.Call () и получил такое же исключение:
private static IQueryable<T> BuildQuery<T>(IQueryable<T> query, string methodName, Expression<Func<T, object>> propertyExpression)
{
var methodCall = Expression.Call(query.Expression,
methodName,
new[] {query.ElementType, property.Body.Type},
new[] {propertyExpression});
return query.Provider.CreateQuery<T>(methodCall);
}