在我们平时的开发需求中,一定遇到过这样的场景,你需要对一个datatable数据进行分组循环,像这一类的需求应该如何完成呢?
举个例子:
在这里我们在if里面对dt中KOorder,HostName,WERKS来进行分组后循环,应该如何做呢:
c
var groupedData = dt.AsEnumerable()
.GroupBy(dr => new {
KOorder = dr.Field<string>("KOorder"),
HostName = dr.Field<string>("HostName"),
WERKS = dr.Field<string>("WERKS")
})
.ToList();
foreach (var group in groupedData)
这段代码中核心点在于groupedData 的赋值问题,在这里我们借助LINQ对dt进行分组数据的转换,
AsEnumerable(): 将DataTable转换为可LINQ操作的IEnumerable
GroupBy: 按三个字段组合创建分组键(匿名类型)
KOorder: 字符串类型的KOorder列值
HostName: 字符串类型的HostName列值
WERKS: 字符串类型的WERKS列值(通常是SAP系统中的工厂代码)
ToList(): 立即执行查询并将分组结果转换为内存中的List<IGrouping<...>>
那么就会转换为类List的分组数据,进行foreach即可完成需求