Сортировка объектов коллекций

Как нужно правильно сделать сортировку объектов коллекций в этом случае?

Есть вот такая структура:

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;}
     
    ...

    ...
}

Информация в таблице имеет следующий вид: введите сюда описание изображения

Нужно предоставить возможность сортировки по ФИО - я сделал, и по ЗП(в любом порядке).

Понятное дело, что сортировать просто диапазон ячеек(с зп) таблицы не подходит.

Что я пробовал:

  1. Вариант, в котором ловлю System.ArgumentException: По крайней мере в одном объекте должен быть реализован интерфейс IComparable..:

tableRowViewsData.OrderByDescending(d => d.AvgSalaryPerYear)

tableRowViewsData - переменная типа List<EmployeeSalaryDynamicsRowView>, которая содержит готовую выборку.

  1. Пытался реализовать IComparable для EmployeeSalaryDynamicsRowView, но так и не понял, как именно нужно сравнивать.

P.S. для работы с Excel использую EPPlus.

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Aziz Umarov

Вы передаете значение списка когда нужно передать сравнимые величины попробуйте передать среднее по списку зарплат 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())
→ Ссылка