仅使用LINQ如何实现C#中列表的列表所有值求和
仅用LINQ实现嵌套列表全量求和方案
完全可以仅通过LINQ实现需求,核心是借助SelectMany方法将嵌套的双层列表结构展平为一维的double序列,之后直接调用求和方法即可,无需手写foreach循环。
改写后的完整实现代码
写法1:和原逻辑对齐的写法
Guid key = ((KeyValuePair<Guid, string>)ComboBoxUsers.SelectedItem).Key; double totalSum = process._statistics .Where(a => a.UserID == key) .Select(p => p.KgIntoBucket) .SelectMany(kgList => kgList) .Sum(); lblKgToBucket.Text = totalSum.ToString();
写法2:更精简的写法
可以直接在SelectMany中读取子列表属性,省略单独的Select步骤:
Guid key = ((KeyValuePair<Guid, string>)ComboBoxUsers.SelectedItem).Key; double totalSum = process._statistics .Where(a => a.UserID == key) .SelectMany(a => a.KgIntoBucket) .Sum(); lblKgToBucket.Text = totalSum.ToString();
逻辑说明
SelectMany的作用是遍历上层序列的每个元素,将每个元素对应的子集合(这里就是每个统计项对应的KgIntoBucket double列表)的所有元素拼接成一个单一的一维double序列,之后直接调用Sum()方法即可对所有嵌套元素完成求和,和你原代码中foreach循环累加每个子列表和的逻辑完全等价。
内容的提问来源于stack exchange,提问作者Ktas
相关产品推荐
相关产品推荐

