C# 从 DataTable 创建子列表
C# Creating Sublists from DataTable
我有一个包含 SQL 查询结果的数据表。我想遍历 table 并根据字段中的相似结果构建子列表。我该怎么做?
比如我的DataTable有如下记录
颜色,计数
红色,1
蓝色,1
蓝色,2
红色,2
黄色,1
我希望能够将它们分组,这样我的结果就是
列表 1:
红色,1
红色,2
列表 2:
蓝色,1
蓝色,2
列表 3:
黄色,1
这可以使用 Linq 轻松完成:
var groups = table.Rows.Cast<DataRow>().GroupBy(z => z["Color"]).Select(z => z.ToList()).ToList();
for (int i = 0; i < groups.Count(); i++)
{
Console.WriteLine("Group " + (i + 1).ToString());
foreach (var item in groups[i])
Console.WriteLine(item["Color"] + ", " + item["Count"].ToString());
Console.WriteLine("");
}
使用 Cast<DataRow>()
转换行允许您使用 Linq 枚举行。 GroupBy()
将行分组,它们共享相同的 Color
值。 Select()
将组作为列表获取。结果是包含您的组的列表(更具体地说,List<List<DataRow>>()
)。修改并投射结果以满足您的要求。
我有一个包含 SQL 查询结果的数据表。我想遍历 table 并根据字段中的相似结果构建子列表。我该怎么做?
比如我的DataTable有如下记录
颜色,计数
红色,1
蓝色,1
蓝色,2
红色,2
黄色,1
我希望能够将它们分组,这样我的结果就是
列表 1:
红色,1
红色,2
列表 2:
蓝色,1
蓝色,2
列表 3:
黄色,1
这可以使用 Linq 轻松完成:
var groups = table.Rows.Cast<DataRow>().GroupBy(z => z["Color"]).Select(z => z.ToList()).ToList();
for (int i = 0; i < groups.Count(); i++)
{
Console.WriteLine("Group " + (i + 1).ToString());
foreach (var item in groups[i])
Console.WriteLine(item["Color"] + ", " + item["Count"].ToString());
Console.WriteLine("");
}
使用 Cast<DataRow>()
转换行允许您使用 Linq 枚举行。 GroupBy()
将行分组,它们共享相同的 Color
值。 Select()
将组作为列表获取。结果是包含您的组的列表(更具体地说,List<List<DataRow>>()
)。修改并投射结果以满足您的要求。