Объединить элементы в списке <T>, когда определенные значения в списке совпадают - PullRequest
0 голосов
/ 09 июля 2019

У меня есть List<Returns>, как показано ниже

Item    ManCode  ShippedQty
ITM01   A10         1
ITM02   A11         2
ITM01   A10         3

Здесь первая и 3 первая строки имеют одинаковые значения для Item и Mancode.в этом случае оба элемента должны быть объединены, и значения shippedQty должны быть добавлены к 4.В окончательном списке должно быть только 2 пунктов

Ответы [ 4 ]

3 голосов
/ 09 июля 2019

Вы можете попробовать использовать linq GroupBy с функцией Sum.

list.GroupBy(x=> new{x.Item ,x.ManCode}).Select(
    x=> new {
        Item = x.key.Item,
        ManCode = x.key.ManCode,
        ShippedQty = x.Sum(y=>y.ShippedQty)
    }
);
2 голосов
/ 09 июля 2019
var result = items.GroupBy(x => new { x.Item, x.ManCode })
                  .Select(x => new Returns 
                  { 
                      Item = x.Key.Item, 
                      ManCode = x.Key.ManCode, 
                      ShippedQty = x.Sum(y => y.ShippedQty)
                  }).ToList();
1 голос
/ 09 июля 2019

Просто попробуйте:

List<Returns> list = new List<Returns>(){ /*populate list here*/ };
list = list
         .GroupBy(i => new {i.Item, i.ManCode})
         .Select(g => new {g.Key.Item, g.Key.ManCode, g.Sum(i => i.ShippedQty)} );
0 голосов
/ 09 июля 2019

Вы можете использовать Linq для группировки объектов по Item и ManCode и суммировать количество следующим образом:

var data = new List<Element> 
{ 
  new Element{  Item ="ITM01", ManCode = "A10", ShippedQty = 1},
  new Element{  Item ="ITM02", ManCode = "A11", ShippedQty = 2},
  new Element{  Item ="ITM01", ManCode = "A10", ShippedQty = 3},
};

var datagrp = (from q in data
               group q by new { q.Item, q.ManCode } into p
               select new Element 
               { Item = p.Key.Item, ManCode = p.Key.ManCode, 
                 ShippedQty = p.Sum(s => s.ShippedQty)}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...