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

问题描述 投票:1回答:2

我有一个cshtml视图,其模型类型为CategoryModel。在视图中,我需要计算模型中的所有项目。我想尽可能简洁地执行此操作,最好不要使用for循环。有没有更好的方法可以执行此操作,还是下面的代码是我的最佳选择?

Model 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;
            }
        }
    } 
  }
c# asp.net-core
2个回答
1
投票

使用Linq,您可以这样做:

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

0
投票

最简单的方法是

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

这里的窍门是SelectMany()将得到的序列展平为一个序列并投影该序列的每个元素。

© www.soinside.com 2019 - 2024. All rights reserved.