首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从线性列表中选择项到带有子项的列表中

从线性列表中选择项到带有子项的列表中
EN

Stack Overflow用户
提问于 2011-11-16 17:43:34
回答 2查看 235关注 0票数 0

我有像这样的数据表:

代码语言:javascript
复制
Group  Item
1      1
1      2
2      3
2      4

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

代码语言:javascript
复制
class Group 
{
   IEnumerable<Item> Items;
}

用一个表达式就可以做到吗?

谢谢!

更新: LINQ-to-objects (我有datatable)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-16 18:17:08

因为您有一个没有实现LINQ接口的DataTable对象,所以我建议您首先将它们转换为更“对象”的东西,然后再使用LINQ来提取数据。

大致是这样的:

代码语言:javascript
复制
//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属性。

票数 1
EN

Stack Overflow用户

发布于 2011-11-16 17:49:36

代码语言:javascript
复制
// untested
var groups = from row in myTable
   group row by row.Group into gr
   select new Group { Items = gr.Select(g => g.Item)  } ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8149528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档