如何通过C# LINQ/Lambda向列表添加汇总所有项的新元素
给Purches列表添加汇总元素
需求描述
我有一个Purches类型的列表,需要通过C#的LINQ或Lambda表达式添加一个新元素,用来汇总列表所有元素的Items和TotalPrice属性。
现有代码
类定义:
public class Purches { public int Id { get; set; } public int Items { get; set; } public int TotalPrice { get; set; } }
初始列表:
List<Purches> purchesList = new List<Purches>() { new Purches() { Id = 1, Items = 3, TotalPrice = 220 }, new Purches() { Id = 2, Items = 5, TotalPrice = 300 } };
期望结果
列表末尾新增一个汇总元素,Id为0,Items为所有元素的Items之和,TotalPrice为所有元素的TotalPrice之和:
List<Purches> purchesList = new List<Purches>() { new Purches() { Id = 1, Items = 3, TotalPrice = 220 }, new Purches() { Id = 2, Items = 5, TotalPrice = 300 }, new Purches() { Id = 0, Items = 8, TotalPrice = 550 } };
实现方案
方案1:修改原列表(直接添加汇总元素)
使用LINQ的Sum方法结合Lambda表达式计算汇总值,再添加到原列表:
// 计算汇总元素 var summaryItem = new Purches { Id = 0, Items = purchesList.Sum(p => p.Items), TotalPrice = purchesList.Sum(p => p.TotalPrice) }; // 添加到原列表 purchesList.Add(summaryItem);
方案2:生成新列表(不修改原列表)
如果不想改动原列表,可以用Concat方法将原列表和汇总元素拼接成新列表:
var newPurchesList = purchesList.Concat(new List<Purches> { new Purches { Id = 0, Items = purchesList.Sum(p => p.Items), TotalPrice = purchesList.Sum(p => p.TotalPrice) } }).ToList();
内容的提问来源于stack exchange,提问作者Naomi Messing
相关产品推荐
相关产品推荐

