Получает исключения ""по крайней мере один объект должен реализовать 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.