Выбор и группировка по разным полям / целым числам - PullRequest
0 голосов
/ 10 февраля 2020

Таблица в SQL:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                  1                    1
   ABC                  1                    2
   ABC                  1                    8
   ABC                  2                    3
   DocumentF            1                    3
   DocumentF            1                    2

Ожидаемый результат:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                     1                    8
   ABC                     2                    3
   DocumentF               1                    3

Как правило, если есть две версии одной и той же ревизии, верните последнюю версию на основе версии.

Я пробовал следующее:

var list = from document in documents
           group document by document.Document
           into groups
           from g in groups
           group g by g.Revision
           into final
           select final.OrderByDescending(d => d.Version).FirstOrDefault();

Приведенный выше код выдает следующее:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                     2                    3
   DocumentF               1                    3

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Используя Linq, мы можем группировать по нескольким свойствам, как показано ниже

 var list = from document in documents
                       group document by (document.Document, document.Revision)
                      into groups
                       select groups.OrderByDescending(d => d.Version).FirstOrDefault();
1 голос
/ 10 февраля 2020

Вам нужно GroupBy несколько столбцов , примерно так:

 var result = documents.GroupBy(c => new { c.Document, c.Revision })
        .Select(c => new DocumentClass
        {
            Document = c.Key.Document,
            Revision = c.Key.Revision,
            Version = c.Max(d=>d.Version)
        }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...