Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ从DataTable生成自定义对象_C#_Linq - Fatal编程技术网

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());