如何在 Linq 中对数据表中的列进行分组
How to Group By on Columns in datatable in Linq
var res3 = dtPriorityMatrix.AsEnumerable()
.GroupBy(hour => hour.Field<int>("Hour"))
.OrderBy(item => item.Key)
.Select(item => new { Hour = item.Key });
我有一个包含 5 列和大约 200 多行数据的数据 table。一个有小时(0-23),其他的是优先级 1、优先级 2 等等,直到优先级 4。我需要每小时提取每个优先级的项目数。我需要有关 Linq 查询的帮助,因为它不是我的强项。谢谢
您必须按两列进行分组。像这样
var query = source.GroupBy(x => new { x.Column1, x.Column2 });
因此您的代码将是
var res3 = dtPriorityMatrix.AsEnumerable()
.GroupBy(hour =>new { hour= hour.Field<int>("Hour"), priority=hour.Field<int>("Priority")} )
.Select(item => new {count=item.count(), Hour = item.Key.hour, priority = item.Key.priority});\
编辑
回复您的评论:
当您将结果列在列表中时,您可以随心所欲地编写它。
查询的输出是一个包含小时、优先级和计数的列表。
如果你想用 3 行字符串
string hLine="";
string pLine="";
string countLine="";
foreach(var item in res3)
{
hLine+= item.hour+" ";
pLine+= item.prioriy+" ";
countLine+= item.count+" ";
}
如果您想将它们放在 table 或其他任何东西中,请使用相同的方法填充您的 table 项
var res3 = dtPriorityMatrix.AsEnumerable()
.GroupBy(hour => hour.Field<int>("Hour"))
.OrderBy(item => item.Key)
.Select(item => new { Hour = item.Key });
我有一个包含 5 列和大约 200 多行数据的数据 table。一个有小时(0-23),其他的是优先级 1、优先级 2 等等,直到优先级 4。我需要每小时提取每个优先级的项目数。我需要有关 Linq 查询的帮助,因为它不是我的强项。谢谢
您必须按两列进行分组。像这样
var query = source.GroupBy(x => new { x.Column1, x.Column2 });
因此您的代码将是
var res3 = dtPriorityMatrix.AsEnumerable()
.GroupBy(hour =>new { hour= hour.Field<int>("Hour"), priority=hour.Field<int>("Priority")} )
.Select(item => new {count=item.count(), Hour = item.Key.hour, priority = item.Key.priority});\
编辑
回复您的评论:
当您将结果列在列表中时,您可以随心所欲地编写它。 查询的输出是一个包含小时、优先级和计数的列表。 如果你想用 3 行字符串
string hLine="";
string pLine="";
string countLine="";
foreach(var item in res3)
{
hLine+= item.hour+" ";
pLine+= item.prioriy+" ";
countLine+= item.count+" ";
}
如果您想将它们放在 table 或其他任何东西中,请使用相同的方法填充您的 table 项