从线性列表中选择项目到子项目列表

时间:2011-11-16 09:43:34

标签: c# linq

我的数据表就像:

Group  Item
1      1
1      2
2      3
2      4

我需要一个linq select来获取输出: IEnumerable<Group>,其中

class Group 
{
   IEnumerable<Item> Items;
}

这可能是一个表达式吗?

谢谢!

upd:LINQ-to-objects(我有数据表)

2 个答案:

答案 0 :(得分:2)

// untested
var groups = from row in myTable
   group row by row.Group into gr
   select new Group { Items = gr.Select(g => g.Item)  } ;

答案 1 :(得分:1)

由于你有一个DataTable对象没有实现LINQ接口,我建议你先把它们转换成更多的东西&#34; objecty&#34;而不是使用LINQ来提取数据 有点像:

//setup
DataTable dt = new DataTable();
dt.Columns.Add("Group", typeof(int));
dt.Columns.Add("Item", typeof(int));

dt.Rows.Add(1, 1);
dt.Rows.Add(1, 2);
dt.Rows.Add(2, 3);
dt.Rows.Add(2, 4);

// transforms the datatable to an IEnumerable of an anonymous type
// that contains a Group and Item properties
var dataObjects = from row in dt.AsEnumerable()
   select new { Group = row["Group"], Item = row["Item"] };

//after that it's just a group by application
var groups = from row in dataObjects
               group row by row.Group into g
               select new Group{ GroupID = g.Key
                                ,Items = g.Select(i => i.Item)};

我假设Group类的组值具有GroupID属性。