DataTable分组并遍历C#
我有一个从数据库返回的数据表 内容如下:DataTable分组并遍历C#,c#,datatable,C#,Datatable,我有一个从数据库返回的数据表 内容如下: UserId | Address | Phone 1 blah 0123 1 blah2 3445 2 sdsdf 2343 2 ssf 2223 3 sadss 2321 这是从数据库返回的DataTable的内容 现在我只想按用户Id对结果进行分组,并循环输出结果 foreach(DataTableGroupedByUser中的Dat
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(Address和PhoneRows中的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"));
}
}
var groupedByUserId=table.AsEnumerable().GroupBy(行=>row.Field(“UserId”);
foreach(groupedByUserId中的var组)
{
WriteLine(“用户Id:{0}”,group.Key);
控制台写入线(“地址电话”);
int rowNum=0;
foreach(组中的数据行)
{
Console.WriteLine(“{0}-{1}{2}”,++rowNum,row.Field(“地址”),row.Field(“地址”);
}
}
您可以从数据表中获得唯一的用户列表(也可以添加ORDERBY子句)
然后你可以做你的for循环
foreach (int u in users)
{
var userInfo = MyDatatable.Where(x => x.User_Id == u).ToList();
foreach(var info in userInfo)
{
...
}
}
一旦它在数据表中,您就不会每次都返回数据库。我在组中还有access UserId列吗?
foreach (int u in users)
{
var userInfo = MyDatatable.Where(x => x.User_Id == u).ToList();
foreach(var info in userInfo)
{
...
}
}