如何计算具有相同(键)名称的列表值

时间:2019-01-11 13:00:29

标签: c#

我有一个清单,其中:

    public class ListContent
    {
        public string OrderName { get; set; }

        public int OrderNumber { get; set; }

    }

如果OrderName在列表中更常见,我想添加OrderNumber's

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ完成所有操作:

  • 从LINQ GroupBy开始,在OrderName上分组
  • 您现在有了一个组列表,每个订单名称一个,包含所有带有该OrderName的ListContent结构。然后,您可以将它们汇总为新的聚合ListContent

例如

var groupedOrders = orders.GroupBy(o => o.OrderName)
                          .Select(g => new ListContent {
                                           OrderName = g.Key,
                                           OrderValue = g.Sum(o => o.OrderValue)
                                       })
                          .ToList();

您也可能会更加聪明,不要在已经只有那个OrderName的地方构造一个新的ListContent,但这是更容易理解的版本。

答案 1 :(得分:0)

如果您的列表包含多个相同的OrderName,则可以使用group。然后,您可以像这样在同一组中的所有sum中提取OrderNumber

var result = (from o in listContents
              group o by o.OrderName into grp
              select new
              {
                  OrderName = grp.Key,
                  Total = grp.Select(x => x.OrderNumber).Sum()
              }).ToList();

listContents是您的课程ListContent的列表。

然后您可以使用上面的result打印它的项目值,例如

foreach (var item in result)
{
    Console.WriteLine("OrderName: " + item.OrderName);
    Console.WriteLine("Total: " + item.Total);
}