我有一个cshtml视图,其模型类型为CategoryModel
。在视图中,我需要计算模型中的所有项目。我想尽可能简洁地执行此操作,最好不要使用for循环。有没有更好的方法可以执行此操作,还是下面的代码是我的最佳选择?
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()将得到的序列展平为一个序列并投影该序列的每个元素。