微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

特定属性上的C#总和对象列表

如何解决特定属性上的C#总和对象列表

我目前正在开发一个ASP.NET应用程序,在该应用程序中,我需要根据从数据库接收到的数据来显示几个图表。我以对象列表的形式接收它们,例如:

{ 
    { name: "A",val: 20 },{ name: "A",val: 10 },{ name: "B",val: 6 },{ name: "C",val: 1 },val: 20 } 
}

我要转换此列表,目标列表应如下所示:

{ { name: "A",val: 30 } { name: "B",val: 21 } }

我希望将所有名称为“ A”的对象“合并”为一个对象,其中val现在是单个对象的所有值的总和。目前,我使用的是foor循环和新的List,我花了很长时间反复浏览以实现此目的,但是我认为这效率很低。可能有一些LINQ选项可以做到这一点,但我还没有发现任何东西。我该如何优化呢?

谢谢!

解决方法

您只需使用GroupBy并投影结果

对序列的元素进行分组。

示例

var results = List.GroupBy(x => x.name)
                  .Select( x => new { name = x.Key,val = x.Sum(x => x.val) });
,

您可以使用.GroupBy()根据Name属性对对象列表进行分组,然后使用.Sum()计算Val属性的所有值的总和。

var groupResult = ListOfObject
    .GroupBy(x => x.Name)
    .Select(y => new
            {
                Name= y.Key,Val = y.Sum(s => s.Val)
            });

.Net Fiddle

,

您也可以在数据库端对其求和 https://www.w3resource.com/sql/aggregate-functions/sum-with-group-by.php

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。