Сортировать и группировать список объектов по нескольким свойствам и условиям - PullRequest
0 голосов
/ 30 октября 2019

У меня есть список объектов, которые имеют следующие свойства:

Дата (обычный формат даты)Высокий приоритет (булен)Приоритет (целое число)Завершено (булево)Закрыть (логическое)

Я пытаюсь использовать linq, чтобы упорядочить этот список по следующей логике:

Порядок с высоким приоритетом, если он не завершензатем по приоритету, если не завершенотогда без приоритетатогда с высоким приоритетом, если завершенозатем по приоритету, если завершенозатем закрытым

Также мне нужно, чтобы каждая группа была упорядочена по дате.

Вот мой текущий запрос linq:

Tasks.GroupBy(x => x.Date)
    .Select(s => 
        s.OrderByDescending(a => a.HighPriority)
         .ThenBy(a => a.Priority)
         .ThenBy(a => a.Closed))
    .SelectMany(sa => sa)
    .ToList();

Как мне изменить свой запрос, чтобы получитьсписок, чтобы следовать моей логике?

1 Ответ

1 голос
/ 30 октября 2019

Tasks - это коллекция экземпляров класса. Создайте вычисляемое свойство в этом классе с именем OrderPriority.

public byte OrderPriority
{
    get
    {
        if (HighPriority && !Completed)
            return 1;
        if (Priority && !Completed)
            return 2;
        // and so forth
    }
}

Тогда ваш LINQ может выглядеть следующим образом:

Tasks.OrderBy(x => x.OrderPriority).ThenBy(x => x.Date).ToList();
...