如何在Linq中的数据表中的列上分组

时间:2016-07-21 10:09:01

标签: asp.net linq c#-3.0

    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查询的帮助,因为它不是我强大的领域。感谢

1 个答案:

答案 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+" ";
}

如果您想将它们放在表格或任何内容中,请使用相同的方法填充表格项目