我正在尝试遍历数据以构建对象列表,每个对象都有一个对象列表。这是数据的样子
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实现,还是我应该手动编写循环?
答案 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());