Сортировка объектов коллекций
Как нужно правильно сделать сортировку объектов коллекций в этом случае?
Есть вот такая структура:
public struct EmployeeSalaryDynamicsRowView
{
public string EmployeeName { get; set; }
public string EmployeeSurname { get; set; }
public string EmployeePatronymic { get; set; }
public List<double> AvgSalaryPerYear { get; set; }
}
Ее назначение - хранение данных, которые представляют из себя строку таблицы в Excel.
По ходу программы будет создан IEnumerable<EmployeeSalaryDynamicsRowView>, который поместиться в отдельный класс, содержащий информацию о соответствующей таблице.
Примерно это выглядит так:
public class SomeClassConatinsTableRowsData
{
IEnumerable<EmployeeSalaryDynamicsRowView> RowsData {get; set;}
...
...
}
Информация в таблице имеет следующий вид:

Нужно предоставить возможность сортировки по ФИО - я сделал, и по ЗП(в любом порядке).
Понятное дело, что сортировать просто диапазон ячеек(с зп) таблицы не подходит.
Что я пробовал:
- Вариант, в котором ловлю
System.ArgumentException: По крайней мере в одном объекте должен быть реализован интерфейс IComparable..:
tableRowViewsData.OrderByDescending(d => d.AvgSalaryPerYear)
tableRowViewsData - переменная типа List<EmployeeSalaryDynamicsRowView>, которая содержит готовую выборку.
- Пытался реализовать
IComparableдляEmployeeSalaryDynamicsRowView, но так и не понял, как именно нужно сравнивать.
P.S. для работы с Excel использую EPPlus.
Ответы (1 шт):
Вы передаете значение списка когда нужно передать сравнимые величины попробуйте передать среднее по списку зарплат Average(), или что-то подобное которое вернет единственное значение для списка (Count, First, Min, Max ..... )
tableRowViewsData.OrderByDescending(d => d.AvgSalaryPerYear.Average())
для пустого сделайте так
tableRowViewsData.OrderByDescending(d => d.AvgSalaryPerYear != null ? d.AvgSalaryPerYear.Average(): 0)
если сортировка не такая как нужно посмотрите в сторону других функций
tableRowViewsData.OrderByDescending(d => d.AvgSalaryPerYear.Last())
