Подсчет дочерних элементов в списке родительских элементов в cshtml View Model - PullRequest
1 голос
/ 26 сентября 2019

У меня есть представление 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;
            }
        }
    } 
  }

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Используя Linq, вы можете сделать это:

var itemGroupItemsCount = CategoryModel.ItemGroups.Sum(i => i.Items.Count);
0 голосов
/ 26 сентября 2019

Самый простой способ сделать это -

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

Хитрость в том, что SelectMany () сглаживает результирующие последовательности в одну последовательность и проецирует каждый элемент последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...