Сообщение об ошибке, которое я получаю:
По крайней мере один объект должен реализовать IComparable
Код, вызывающий это, ниже:
private static IEnumerable<Result> setOrderBy(IEnumerable<Result> value, string order)
{
if (order.Equals("ASC"))
{
//value = value.OrderBy(c => c, new SearchService.ResultComparer<Attribute>());
value = value.OrderBy<Result>(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());
//value = value.OrderBy(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<AttributeItem>()));
}
if (order.Equals("DESC"))
{
value = value.OrderByDescending(c => c, new SearchService.ResultComparer<Attribute>());
//value = value.OrderByDescending(o => o.StringAttributes.Where(p => p.AttributeName == "MatterName"));
}
return value;
}
Немного фона: В моем приложении MVC2 я выполняю поиск в своем Поисковом контроллере. Когда я отправляю свои результаты в представление Results, я пытаюсь заказать результаты в алфавитном порядке в порядке возрастания или убывания. Однако, когда я выписываю логику для установки свойства OrderBy для моего объекта результата, я получаю волнистую красную строку под кодом (как замечено в VS2008). По некоторым причинам методу не нравится модель данных, на которую я пытаюсь сделать вид. Каждый Объект результата имеет различные свойства, одно из которых является списком атрибутов строки типа (отсюда имя StringAttributes), я пытаюсь отсортировать каждый Объект результата в своем наборе IEnumerable значением одного из Строковых Атрибутов, который присутствует во ВСЕХ моих записях результата.
Справка!
Я думаю, вам нужно использовать First ()
или Single
вместо Where ()
в том месте, где вы находитесь выбор атрибута
для сортировки. В настоящий момент вы просите OrderBy рассчитать порядок с использованием IEnumerable
, а не конкретного атрибута.
value = value.OrderBy<Result>(o => o.StringAttributes.Single(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());
или
value = value.OrderBy<Result>(o => o.StringAttributes.First(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());