Сортировка LINQ: невозможно упорядочить по типу 'System.IComparable'

Я создаю небольшой класс поиска, который использует predicatebuilder для получения некоторых результатов:

вот мой запрос:

var results = (from u in db.users
               join p in db.profiles on u.userId equals p.UserID
               select new SearchResult { Profile = p, User = u }).AsQueryable().Where(predicate);

Результаты становятся перечисляемыми в SearchResult:

public class SearchResult 
{
    public user User { get; set; }
    public profile Profile { get; set; }
}

Это отлично работает, но теперь я также хочу его отсортировать:

var sortedResult = results.OrderBy(x => x.User.timeAdded);

И это тоже отлично работает, кроме случаев, когда я:

Expression<Func<SearchResult, IComparable>> OrderByExpression = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByExpression);

Я получаю эту ошибку: Невозможно заказать по типу System.IComparable.

Разве это не то же самое, что поместить лямбда-запрос прямо в предложение orderby (которое работает)? Причина, по которой я это делаю, заключается в том, что я хочу передать выражение orderby другой функции.

Кто-нибудь знает, что я делаю не так? Спасибо!


person Elger Mensonides    schedule 13.11.2010    source источник
comment
Покажите, пожалуйста, реализацию OrderByExpression   -  person Dyppl    schedule 13.11.2010


Ответы (2)


OrderBy ожидает выражения типа Expression<Func<TSource, TResult>>. В вашем коде TSource - это SearchResult, а TResult - это IComparable, что не может быть преобразовано в запрос БД. Вы хотите, чтобы TResult был примитивным типом, равным конкретному типу timeAdded (учитывая имя, я предполагаю, что это DateTime?), Чтобы это работало.

Expression<Func<SearchResult, DateTime>> OrderByExpression = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByExpression);
person Julien Lebosquain    schedule 13.11.2010

Вы пробовали (сейчас нет доступа к VS, так что это скорее предположение):

Func<SearchResult, IComparable> OrderByFunc = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByFunc);
person Jakub Konecki    schedule 13.11.2010