DataTable 分组并循环访问 C#
DataTable group by and iterate through C#
我有一个从数据库返回的数据表。
内容类似:
UserId | Address | Phone
1 blah 0123
1 blah2 3445
2 sdsdf 2343
2 ssf 2223
3 sadss 2321
这是从数据库返回的DataTable的内容。
现在我只想按用户 ID 对结果进行分组并循环输出结果
foreach(DataTableGroupedByUser 中的 DataRow userRow){
foreach(AddressAndPhoneRows 中的 DataRow restOfColumns){
输出用户详细信息
}
}
我得到的输出应该是:
User Id: 1
Address Phone
1- blah 0123
2- blah2 3445
User Id 2:
Address Phone
1- sdsdf 2343
2- ssf 2223
用户 ID :3
...
希望你明白了。
基本上我不想为每个用户多次查询数据库,而只是使用一个查询来提取所有数据并处理内存中的分组。
还有其他原因。
有没有办法通过使用 DataTable 和过滤来实现?
您可以使用 LINQ:
var groupedByUserId = table.AsEnumerable().GroupBy(row => row.Field<int>("UserId"));
foreach(var group in groupedByUserId)
{
Console.WriteLine("User Id: {0}", group.Key);
Console.WriteLine("Address Phone");
int rowNum = 0;
foreach(DataRow row in group)
{
Console.WriteLine("{0}- {1} {2}", ++rowNum, row.Field<string>("Address"), row.Field<string>("Address"));
}
}
您可以从您的数据中获取唯一的用户列表table(您也可以添加 order by 子句)
var users = MyDatatable.Select(x => x.User_ID).Distinct().ToList();
然后你可以做你的 for 循环
foreach (int u in users)
{
var userInfo = MyDatatable.Where(x => x.User_Id == u).ToList();
foreach(var info in userInfo)
{
...
}
}
一旦它进入数据table,您就不会每次都返回数据库。
我有一个从数据库返回的数据表。
内容类似:
UserId | Address | Phone
1 blah 0123
1 blah2 3445
2 sdsdf 2343
2 ssf 2223
3 sadss 2321
这是从数据库返回的DataTable的内容。
现在我只想按用户 ID 对结果进行分组并循环输出结果
foreach(DataTableGroupedByUser 中的 DataRow userRow){
foreach(AddressAndPhoneRows 中的 DataRow restOfColumns){
输出用户详细信息 } }
我得到的输出应该是:
User Id: 1
Address Phone
1- blah 0123
2- blah2 3445
User Id 2:
Address Phone
1- sdsdf 2343
2- ssf 2223
用户 ID :3 ...
希望你明白了。
基本上我不想为每个用户多次查询数据库,而只是使用一个查询来提取所有数据并处理内存中的分组。
还有其他原因。
有没有办法通过使用 DataTable 和过滤来实现?
您可以使用 LINQ:
var groupedByUserId = table.AsEnumerable().GroupBy(row => row.Field<int>("UserId"));
foreach(var group in groupedByUserId)
{
Console.WriteLine("User Id: {0}", group.Key);
Console.WriteLine("Address Phone");
int rowNum = 0;
foreach(DataRow row in group)
{
Console.WriteLine("{0}- {1} {2}", ++rowNum, row.Field<string>("Address"), row.Field<string>("Address"));
}
}
您可以从您的数据中获取唯一的用户列表table(您也可以添加 order by 子句)
var users = MyDatatable.Select(x => x.User_ID).Distinct().ToList();
然后你可以做你的 for 循环
foreach (int u in users)
{
var userInfo = MyDatatable.Where(x => x.User_Id == u).ToList();
foreach(var info in userInfo)
{
...
}
}
一旦它进入数据table,您就不会每次都返回数据库。