Синтаксическая ошибка при выполнении OrderBy <T> в Списке IEnumerable

Сообщение об ошибке, которое я получаю:

По крайней мере один объект должен реализовать 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 значением одного из Строковых Атрибутов, который присутствует во ВСЕХ моих записях результата.

Справка!

1
задан abatishchev 23 June 2010 в 10:09
поделиться

1 ответ

Я думаю, вам нужно использовать 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>());
2
ответ дан 2 September 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: