使用linq分组数据

时间:2014-04-02 20:01:37

标签: c# .net linq

我有对象列表,在视图中我想显示它们按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?
  }
}

2 个答案:

答案 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