使用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或我应该只是手动编写循环?

使用LINQ从DataTable构建自定义对象

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