有没有一种快速的方法来获取IEnumerable集合中的唯一属性?

时间:2019-08-23 00:42:18

标签: c# asp.net linq razor

所以我在剃刀页面视图中有这些项目集合,我在表格中显示这些项目,如下所示:

       @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个,但是它是如此丑陋,我不想用这种方式进行编码

1 个答案:

答案 0 :(得分:0)

您可以使用System.Linq从项目列表中返回Distinct类别:

var categories = Model.Items.Distinct(item => item.Category);

然后,当用户选择类别时,您可以使用:

var categoryItems = Model.Items.Where(item => item.Category == selectedCategory);