使用LINQ

时间:2015-08-27 13:38:01

标签: c# linq

我正在尝试遍历数据以构建对象列表,每个对象都有一个对象列表。这是数据的样子

AccountID    AccountName    ListItem
------------------------------------
1            Foo            Item1
1            Foo            Item2
2            Test           Value1
2            Test           Value2
2            Test           Value3
3            Bar            List1
3            Bar            List2
3            Bar            List3

我见过的其他帖子并没有解决我的问题。根据我的数据,我希望创建3个Account个对象,每个对象都有一个List<string>的ListItem数据。

我希望能做到这样的事情:

var accountGroups = myDataTable.GroupBy(x=>x.Field<string>("AccountName"));

然后遍历accountGroups以添加ListItems,但DataTable当然没有实现IEnumerable<T>

这可以用LINQ实现,还是我应该手动编写循环?

2 个答案:

答案 0 :(得分:2)

  

DataTable没有实施IEnumerable<T>

不是直接的,但AsEnumerable()中的System.Data.DataRowExtensions扩展方法会将其转换为IEnumerable<DataRow>

var accountGroups = myDataTable.AsEnumerable()
                               .GroupBy(x=>x.Field<string>("AccountName"))
                               .Select(g => new Account {
                                    AccountName = g.Key,
                                    List = g.Select(g => g.Field<string>("ListItem").ToList()
                                });

答案 1 :(得分:0)

  

但当然DataTable并没有实现IEnumerable

您可以使用扩展方法AsEnumerable

IEnumerable<List<string>> accountListItems = myDataTable.AsEnumerable()
    .GroupBy(row => row.Field<string>("AccountName"))
    .Select(g => g.Select(row => row.Field<string>("ListItem")).ToList());