我有一个 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(( 将生成的序列展平为一个序列并投影序列的每个元素。