我想对列表的子列表中的属性求和...示例:
我有:
public class List1 {
public List<List2> List2 { get; set; }
}
public class List2 {
public int TotalUnits { get; set; }
}
在我看来我有一个 List<List1>
,所以我想做类似的事情:
<%= Model.List1.Where(x.List2.Any()).Sum(x=>x.TotalUnits) .%>
显然 Sum 之后的所有内容都不起作用,但是有没有一种方法可以在一行中完成此操作而无需在我的服务器端创建新的 Dto?
最佳答案
你是想得到所有TotalUnits
的总和吗?在每个List2
实例?如果是,则执行以下操作
<%= Model.List1.SelectMany(x => x.List2).Sum(x => x.TotalUnits) %>
这是它的工作原理
Model.List1.SelectMany(x => x.List2)
这需要 List<List1>
并将其转换为 IEnumerable<List2>
. SelectMany
类似于 Select
因为它是枚举中元素的投影,除了它期望一个可枚举的结果。然后将可枚举结果的集合放入单个可枚举对象中。或者用更简单的话来说,它将列表的列表扁平化。
.Sum(x => x.TotalUnits)
这只是对 TotalUnits
求和List2
的成员.
您的代码中还有一个小错字。我认为它应该如下所示(注意缺少的 class
关键字)
public int TotalUnits { get; set;}
关于c# - 如何在 linq 中对子列表求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138866/