Сортировка поверх группировки LINQ

292
16 ноября 2021, 22:20

Имеется коллекция с данными. Я пишу к ней следующий запрос:

var rezult = Должники
    .GroupBy(x => ((x.num-1)/36).ToString())
    .Select(x => new { a = x
                          .Select(y => new { y.dolg, y.num, y.fam })
                          .OrderByDescending(y=>y.dolg)
                          .Take(3),
                       b = x.Key});

Он работает, я получаю часть решения. Мне нужно этот запрос отсортировать по убыванию поля dolg. Я пытался в конец добавить конструкцию типа:

.OrderByDescending(x=>x.a)

Но, тогда я получаю исключение "По крайней мере в одном объекте должен быть реализован интерфейс IComparable." Как мне тогда выполнить сортировку без учета ранее сделанной группировки? Дополнение

List<Должник> Должники = new List<Должник>();
Должники.Add(new Должник(58.7, "Карапузова", 5));
Должники.Add(new Должник(34.5, "Чуприн", 10));
Должники.Add(new Должник(58.7, "Карапузова", 5));
Должники.Add(new Должник(34.5, "Чуприн", 10));
Должники.Add(new Должник(64.1, "Большова", 25));
Должники.Add(new Должник(54.6, "Бурцев", 15));
Должники.Add(new Должник(21.3, "Беленкова", 30));
Должники.Add(new Должник(87.9, "Сырова", 37));
Должники.Add(new Должник(27.9, "Малец", 42));
Должники.Add(new Должник(54.6, "Бакарчук", 86));
Должники.Add(new Должник(58.7, "Макарова", 90));
Должники.Add(new Должник(34.5, "Калашникова", 100));
Должники.Add(new Должник(64.1, "Мосин", 97));
Должники.Add(new Должник(54.1, "Драгунов", 107));

Сам класс Должник также реализован и содержит поля:

public double dolg;
public String fam;
public int num;

То что я имею на данный момент без ошибки

Мне же нужно чтобы сортировка срабатывала по полю долг

Answer 1

Для решения данной проблемы необходимо было воспользоваться функцией SelectMany

var rezult = Должники.GroupBy(x => ((x.num - 1) / 36+1).ToString())
    .Select(x => new {
         a = x.Key,
         b = x.OrderByDescending(y => y.dolg).Take(3)})
    .SelectMany(x => x.b, (l, d) => new { 
         podr = l.a, fam = d.fam, dolg = d.dolg, num = d.num})
    .OrderByDescending(x => x.dolg);
READ ALSO
Unity Rigidbody.Addforce Impulse

Unity Rigidbody.Addforce Impulse

Необходимо, чтобы объект paddle толкал объект sphere и второй получал импульс, после этого второй объект бы катился от импульсаТо, что получается...

248
Имя отсутствует в текущем контексте C#

Имя отсутствует в текущем контексте C#

Есть форма FormData и форма FormResultНа первой есть textBox и Button

116
datagridview позиция слов

datagridview позиция слов

Подскажите, пожалуйста, как вывести каждую позицию слова в отдельному столбце грида? Вывожу позиции так:

257
Почему не происходит запись в локальную базу данных?

Почему не происходит запись в локальную базу данных?

У меня есть программа, которая парсит данные с сайта и сохраняет их по одному экземпляру в файлы f1json , f2

215