所以我在剃刀页面视图中有这些项目集合,我在表格中显示这些项目,如下所示:
@foreach (var item in Model.Items)
{
<tr class="itemsRow">
<td class="">
<a asp-controller="Catalog" asp-action="ProductPage" asp-route-id="@item.Id">
<img src="@item.ImageUrl" class="imageCell" />
</a>
</td>
<td class="">@item.Title </td>
<td class="">@item.Category </td>
<td class="">@item.Sku </td>
<td class="">@item.Location </td>
<td class="">@item.Available </td>
<td class="">@item.Notes </td>
</tr>
}
列表中的每个项目都属于一个类别@ item.Category,并且多个项目可以属于同一类别。我想创建一个填充有唯一类别的下拉菜单,因此,如果用户选择其中一个类别,则页面将按该类别过滤项目。
我打算以一种非常丑陋的方式将类别放入列表中,并执行类似的操作
listOfCategories = new list;
foreach(item in Model.Items){
foreach(addedCategories in listOfCategories{
//if item.category isn't in the list of categories then add it to the list
}
}
有更好的方法吗?我并不担心性能,因为对于99%的用户,类别应该少于20个,但是它是如此丑陋,我不想用这种方式进行编码
答案 0 :(得分:0)
您可以使用System.Linq
从项目列表中返回Distinct
类别:
var categories = Model.Items.Distinct(item => item.Category);
然后,当用户选择类别时,您可以使用:
var categoryItems = Model.Items.Where(item => item.Category == selectedCategory);