【问题标题】:Is there a quick way to get unique properties in an IEnumerable collection? [duplicate]有没有一种快速的方法来获取 IEnumerable 集合中的唯一属性? [复制]
【发布时间】:2019-08-23 00:42:18
【问题描述】:

所以我在我的 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,但它太丑了,我不想这样编码

【问题讨论】:

    标签: c# asp.net linq razor


    【解决方案1】:

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

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

    然后当用户选择一个类别时,您可以使用以下方式获取项目:

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

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多