var res3 = dtPriorityMatrix.AsEnumerable()
.GroupBy(hour => hour.Field<int>("Hour"))
.OrderBy(item => item.Key)
.Select(item => new { Hour = item.Key });
我有一个包含5列和大约200多行数据的数据表。一个小时(0-23),其他小时为优先级1,优先级2,依此类推,直到优先级4.我需要每小时提取每个优先级的项目数。我需要Linq查询的帮助,因为它不是我强大的领域。感谢
答案 0 :(得分:0)
您必须按两列进行分组。像这样的东西
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+" ";
}
如果您想将它们放在表格或任何内容中,请使用相同的方法填充表格项目