c# - 如何在 linq 中对子列表求和?

标签 c# asp.net-mvc linq

我想对列表的子列表中的属性求和...示例:

我有:

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/

相关文章:

c# - 如何使陷入无限循环的测试失败?

c# - 在局部 View 中使用 AJAX 的 ASP.NET MVC PagedList

c# - 选择前 10 条记录,然后选择下 10 条记录,使用 Linq 进行分页

c# - 一个方法链能叫LINQ吗?

c# - 如何仅包含相关实体的选定属性

c# - 以抽象类的子类数组作为参数的构造函数

c# - 使用自定义分页优化搜索 SQL

javascript - 对使用按钮 OnClick 从带有表格的按钮调用 Ajax 感到困惑?

asp.net-mvc - 是否可以在不使用 IIS 的情况下自行托管 asp.net mvc 应用程序?

c# - 如何返回一天的结果?