在 cshtml 视图模型中计算父元素列表中的子元素



我有一个 cshtml 视图,模型类型为CategoryModel。在视图中,我需要计算模型中的所有项目。我想尽可能简洁地做到这一点,最好不使用 for 循环。有没有更好的方法可以做到这一点,或者下面的代码是我最好的选择?

型号 cs

public class CategoryModel
{
public string Label { get; set; }
public List<ItemGroupModel> ItemGroups { get; set; }
}
public class ItemGroupModel
{
public string Label { get; set; }
public List<ItemModel> Items { get; set; }
}
public class ItemModel
{
public string Label { get; set; }
}

当前解决方案

@{
var itemGroupItemsCount = 0;
if (CategoryModel.ItemGroups.Any())
{
for (var i = 0; i < CategoryModel.ItemGroups.Count; i++)
{
if (CategoryModel.ItemGroups[i].Items.Any())
{
itemGroupItemsCount += CategoryModel.ItemGroups[i].Items.Count;
}
}
} 
}

使用 Linq,您可以执行以下操作:

var itemGroupItemsCount = CategoryModel.ItemGroups.Sum(i => i.Items.Count);

最简单的方法是

var count = categoryModel.ItemGroups.SelectMany(x => x.Items).Count();

这里的诀窍是 SelectMany(( 将生成的序列展平为一个序列并投影序列的每个元素。

相关内容

  • 没有找到相关文章

最新更新