【问题标题】:MVC, Only show first item for each different Name in foreach loopMVC,仅在 foreach 循环中显示每个不同名称的第一项
【发布时间】:2015-05-21 10:27:55
【问题描述】:

我有一个包含 6 个项目(行)的列表。第一列给出了每一行中的属性“名称”:


姓名

项目1

项目1

项目1

项目2

项目2

项目2


是否可以使用 foreach 循环仅显示每个不同名称的第一项,所以我得到如下内容:


项目1

项目2


我尝试过使用 Model.Take(1) 但这仅显示整个列表中的第一项。

我当前的循环如下所示:

foreach (var item in Model)
    {
        <p>@Html.DisplayFor(modelItem => item.Name)</p>
    }

【问题讨论】:

  • 在填充模型的控制器中,您需要使用.Distinct(x =&gt; x.Name) 删除重复项。您可以在视图中执行此操作,但最好首先传递正确的数据
  • 使用容器/数组/向量,遍历检查新值是否已经存在。很简单

标签: c# asp.net-mvc razor model-view-controller foreach


【解决方案1】:
@foreach (var item in Model.Distinct(m => m.Name).OrderBy(m => m.Name))
{
    <p>@Html.DisplayFor(modelItem => item.Name)</p>
}

【讨论】:

    【解决方案2】:

    你需要分组:

    @{
       var result = Model.GroupBy(x=>x.Name);
    
    }
    

    然后在 result 上进行迭代以进行渲染。

    @foeach(var item in result)
    {
      <span>@item.Key</span>
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2019-10-30
      相关资源
      最近更新 更多