如何解决在MVC foreach循环中按名称分组以获得计数
下面的代码是我当前在剃刀视图中运行的代码。
@foreach (var item in Model.intbyAnalysts.Select(x => x.Name).Distinct())
{
<li>
@Html.DisplayFor(x => item)
</li>
}
这使我重新获得所需的名称。我想知道是否还有任何方法可以计数,因此它可以带我回到名称列表,再加上记录数,如下所示:
John 5
Sam 6
Mary 8
etc
它不起作用,但我在想以下内容:
@foreach (var item in Model.intbyAnalysts.GroupBy(x => x.Name)) {
<td>
@Html.DisplayFor(x => x.item))
</td>
<td>
@Html.DisplayFor(x => x.item.Count())
</td>
}
同样,这是行不通的,但我还在想以下内容:
@foreach (var item in Model.intbyAnalysts.GroupBy(x => x.Name)
.Select(n => new {n.Name,n.Count }))
任何帮助工作都会受到赞赏。
解决方法
将Linq逻辑移动到模型类中,而不是将其放在视图中...
这对我有用,无需解释我认为的简单代码:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp
{
public class Program
{
public static void Main()
{
var model = new Model();
model.Items.Add( new Item { Name = "item1" } );
model.Items.Add( new Item { Name = "item1" } );
model.Items.Add( new Item { Name = "item1" } );
model.Items.Add( new Item { Name = "item2" } );
model.Items.Add( new Item { Name = "item2" } );
model.Items.Add( new Item { Name = "item3" } );
foreach (var entry in model.ItemNameAndCount)
{
Console.WriteLine( entry.name + ": " + entry.count );
}
}
public class Model
{
public List<Item> Items { get; set; } = new List<Item>();
public IEnumerable<(string name,int count)> ItemNameAndCount
=> Items.GroupBy( x => x.Name )
.Select( group =>
(
name: group.Key,count: group.Count()
)
);
}
public class Item
{
public string Name { get; set; }
}
}
}
,
一切似乎都很好,除了应该将@Html.DisplayFor(x => x.item.Key))
放在td
的开头(而不仅仅是x.item
)。
这是否为您解决了这个问题?如果没有,请您提供一些错误详细信息来更新问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。