Сортировка LINQ: невозможно упорядочить по типу 'System.IComparable' - PullRequest
0 голосов
/ 13 ноября 2010

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

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

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 другой функции.

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

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

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);
0 голосов
/ 13 ноября 2010

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

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