我有对象列表,在视图中我想显示它们按ParentName分组,而不显示父项名称的重复项,例如每个对象MyObject都有Id,Name,ParentName
MyObject
public int Id {get; set; }
public string Name {get; set; }
public string ParentName {get; set; }
在视图上我有
@model List<MyObject>
我希望显示这样的数据
---- PARENT A -----
ObjectOne Name
ObjectTwo Name
ObjectThree Name
---- PARENT B -----
ObjectOne Name
ObjectTwo Name
ObjectThree Name
所以我试过这样的
@{
foreach(var mydata in @Model.GroupBy(d=>d.ParentName).Select(g=>g.First()))
{
// this returns only one Name per parent, I know this is because g.First() statement,
// but I dont know how to select all items instead of this one?
}
}
答案 0 :(得分:3)
foreach(var mydata in @Model
.GroupBy(d=>d.ParentName)
.Select(g=>
Tuple.Create(
g.Key,
g)))
(当然你可以通过使用一个新的自定义结构代替这个丑陋的元组来修饰代码。)
答案 1 :(得分:1)
使用g.ToList()
代替g.First()
,并将Select
更改为SelectMany
。
@Model.GroupBy(d => d.ParentName).SelectMany(g => g.ToList())
顺便说一句,如果您使用MVC
,请不要在View
中执行此操作。您应该在Controller
上执行此类操作,然后将结果传递给View
。