C#LINQ按小时从数据表组中获取记录

Har*_*ava 2 c# linq

我有一个数据表,其列是名称,代码,dateAndTime.现在我希望使用LINQ获取一天中每小时所有记录的计数.

DateTime列包含数据

2014-08-01 07:00:06.163
2014-08-01 07:00:11.873
2014-08-01 07:00:42.623
2014-08-01 07:00:48.363
2014-08-01 07:01:15.243
2014-08-01 07:01:16.507
Run Code Online (Sandbox Code Playgroud)

现在我想得到从一天开始到每天每小时结束的所有记录的计数.

示例是:

7 O Clock : 56 Records
8 O Clock : 90 Records
..
..
etc.
Run Code Online (Sandbox Code Playgroud)

如何通过LINQ实现?

Hab*_*bib 11

如果您的列类型是,DateTime那么您可以按其Hour属性进行分组并获取每小时的计数,如:

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

dt你的位置在哪里DataTable

编辑:只要你有一个日期的数据,上面应该工作DataTable,但如果你有多个日期的行,那么分组应该完成Date,Hour如:

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

  • “asEnumerable”不是要从数据库中提取所有数据,然后使用列表上的 linq 查询对其进行分组吗?如果是这样,你应该在最后做。 (2认同)