LINQ按小时从数据表组中获取数据

时间:2015-04-18 05:00:15

标签: c# linq datatable

我有一个数据表,其中包含如下数据:

name      Code    dateAndTime
ab01     3hdfj3   2012-06-24 14:17:32.833
ab02     57dfdf   2012-07-12 14:08:28.210
ab02     57dfdf   2012-07-12 14:08:28.210
ab02     57dfdf   2012-07-12 15:08:28.210
ab03     57dfdf   2012-07-12 14:08:28.210
ab03     9jdhfj   2012-07-12 15:15:12.007
etc....

现在我想通过LINQ过滤数据表中的数据。我希望按小时计算记录数。我的一天从7点钟开始,到第二天的7点钟结束。所以,我想逐小时获得24小时的数据。这是第一个条件。

第二个条件是,我希望数据也按代码分组。所以情况就是这样:

表:

Name     7 OClock  8 O Clock   9 O Clock  etc.....
ab01     56           75          88
ab02     45           45          77
ab03     57           66          67
etc...

在上面生成的表格中,列应按小时和小时递增。行应按名称递增组。我得到了当前代码以按小时计算列数。这里是DataTable的“dt”

var query = dt.AsEnumerable()
    .GroupBy(row => row.Field<DateTime>("dateAndTime").Hour)
    .Select(grp => new
    {
        Hour = grp.Key,
        Count = grp.Count()
    });

                foreach (var x in query)
                {

                }
            }

我如何达到上述条件?

1 个答案:

答案 0 :(得分:2)

您可以按以下两个条件进行分组:

var query = dt.AsEnumerable()
    .GroupBy(row => new
               {
                   Hour = row.Field<DateTime>("dateAndTime").Hour,
                   Code = row.Field<returnTypeOFCodeColumn>("Code")
               })
    .Select(g => new 
               {
                   Hour = g.Key.Hour,
                   Code = g.Key.Code, 
                   Count = g.Count()
               }
        );

foreach (var item in query)
{
    //access properties here 
    //item.Hour, item.Code, item.Count  
}