Я играю и пытаюсь создать метод расширения для IQueryable, который сортирует его по произвольному свойству объекта.
public static class IQueryableExtender
{
public static IQueryable<TSource> Sort<TSource>(this IQueryable<TSource> query, string orderProperty, string sortDirection = "asc")
{
var elementType = query.ElementType;
var propertyInfo = elementType.GetProperty(orderProperty);
if (propertyInfo == null)
{
throw new ArgumentException(string.Format("{0} is not a property on {1}", orderProperty, elementType.Name));
}
switch (sortDirection.ToLower())
{
case "asc":
case "ascending":
return query.OrderBy(x => propertyInfo.GetValue(x, null));
break;
case "desc":
case "descending":
return query.OrderByDescending(x => propertyInfo.GetValue(x, null));
break;
}
return query;
}
}
Я получаю эту ошибку при вызове метода. Я предполагаю, что это связано с тем, что IQueryable еще не выполнил и не получил никаких объектов.
LINQ to Entities не распознает метод System.Object GetValue(System.Object, System.Object[])
, и этот метод нельзя преобразовать в выражение хранилища.
Я могу решить эту проблему, выполнив ToList в IQueryable, но затем я получаю данные в методе расширения, а это не то, что мне нужно.
Можно ли это решить?