Получает исключения ""по крайней мере один объект должен реализовать icomparable "" только при применении метода ToList () к IQueryable

когда я не использую метод ToList () для запроса firsQue, все "ок!"но мне нужно сразу выполнить firsQue! Затем я добавил метод end ToList () и получил исключение во втором запросе secQue "хотя бы один объект должен реализовать IComparable".


Я не понимаю, что вызвало это, группировка выполняется по g.Действие.Тип действия.Имя ... это строка, строковый тип реализует интерфейс IComparer

static void Main(string[] args)
{
    var firsQue  = GetAll()
        .SelectMany(s => s.Goals
            .Where(s2 => s2.ID == 2)
             .SelectMany(f => f.Actions
                 .SelectMany(h => h.GoalProgresses))).ToList();


    var secQue = (from g in firsQue  
                        group g by g.Action.ActionType.Name into a
                        select new
                        {
                            Name = a.Key,
                            Duration = a.Sum(s => s.Action.Duration),
                            Done = a.Sum(s => s.DurationComplete),
                            RemainsToDo = (a.Sum(s => s.Action.Duration) - a.Sum(s => s.DurationComplete))
                        })
                         .OrderBy(s => s)
                         .ToList();

    System.Console.ReadLine();
}

static IQueryable<Patient> GetAll()
{
    return db.Patients;
}

}

3 ответов


проблема:

.OrderBy(s => s)

компилятор не знает, как сравнить ваши ценности и выполнить заказ.Ваш тип должен реализовать IComparable (хотя это анонимный тип) или вы можете сделать сортировку по некоторому свойству:

.OrderBy(s => s.ID)

вы призываете OrderBy но ваше выражение s => s просто дает анонимный тип, созданный в select new выше. Анонимные типы не сопоставимы, поэтому вы не можете ими. Может быть, вы имеете в виду .OrderBy(s => s.Name)?


когда вы звоните OrderBy С вашим выражением, как c => c.someParameter и если ваш некоторый параметр является ссылочным параметром другой таблицы, то также вы получите ту же ошибку, что и, например,

var sortedOrders = allOrders.OrderBy(s =>s.Branch);

в приведенном выше примере все заказы-это сбор заказов, и я хочу отсортировать их по ветке. Но ветвь-это ссылочный столбец таблицы ветвей. Так что я получал ошибку.

следовательно, если вы заказываете, используя ссылочный столбец, вы должны сделать следующее путь.

var sortedOrders = allOrders.OrderBy(s =>s.Branch.Id)

или любой столбец ветви формы параметра как имя ветви etc.