使用LINQ从DataTable构建自定义对象
本文关键字:自定义 对象 构建 DataTable LINQ 使用 | 更新日期: 2023-09-27 18:10:15
我试图通过数据循环构建一个对象列表,每个对象都有一个对象列表。下面是数据的样子
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
对象,每个对象都有一个ListItem数据的List<string>
。
我希望这样做:
var accountGroups = myDataTable.GroupBy(x=>x.Field<string>("AccountName"));
,然后循环通过accountGroups添加列表项,但当然DataTable不实现IEnumerable<T>
这是可能的与LINQ或我应该只是手动编写循环?
DataTable
不实现IEnumerable<T>
不直接,但是在System.Data.DataRowExtensions
中有一个AsEnumerable()
扩展方法可以将其转换为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()
});
但是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());