C# 使用LINQ从DataTable生成自定义对象
我试图通过循环数据来构建一个对象列表,每个对象都有一个对象列表。下面是数据的样子C# 使用LINQ从DataTable生成自定义对象,c#,linq,C#,Linq,我试图通过循环数据来构建一个对象列表,每个对象都有一个对象列表。下面是数据的样子 AccountID AccountName ListItem ------------------------------------ 1 Foo Item1 1 Foo Item2 2 Test Value1 2 Test Valu
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
对象,每个对象都有一个列表项数据的列表
我希望做这样的事情:
var accountGroups = myDataTable.GroupBy(x=>x.Field<string>("AccountName"));
var accountGroups=myDataTable.GroupBy(x=>x.Field(“AccountName”);
然后通过accountGroups循环添加ListItems,当然DataTable不会实现IEnumerable
这在LINQ中是可能的,还是应该手动编写循环
DataTable
未实现IEnumerable
不是直接的,但是在System.Data.DataRowExtensions
中有一个AsEnumerable()
扩展方法,可以将其转换为IEnumerable
var accountGroups=myDataTable.AsEnumerable()
.GroupBy(x=>x.Field(“AccountName”))
.选择(g=>新帐户{
AccountName=g.键,
List=g.Select(g=>g.Field(“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());
IEnumerable accountListItems=myDataTable.AsEnumerable()
.GroupBy(row=>row.Field(“AccountName”))
.Select(g=>g.Select(row=>row.Field(“ListItem”)).ToList();
您可以将其设置为myDataTable.Rows.GroupBy(..)
或myDataTable.AsEnumerable().GroupBy(..)
IEnumerable<List<string>> accountListItems = myDataTable.AsEnumerable()
.GroupBy(row => row.Field<string>("AccountName"))
.Select(g => g.Select(row => row.Field<string>("ListItem")).ToList());