我有一个数据表,其列是name,code,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
现在我想得到从一天开始到一天结束的所有记录的计数。
示例是:
7 O Clock : 56 Records
8 O Clock : 90 Records
..
..
etc.
如何通过LINQ实现?
答案 0 :(得分:9)
如果您的列类型为DateTime
,那么您可以按其Hour
属性进行分组,并获取每小时的计数,例如:
var query = dt.AsEnumerable()
.GroupBy(row => row.Field<DateTime>("dateAndTime").Hour)
.Select(grp => new
{
Hour = grp.Key,
Count = grp.Count()
});
其中dt
是您的DataTable
编辑:只要您拥有DataTable
中单个日期的数据,上述内容就可以正常运行,但如果您有多个日期的行,则应在Date
以及{进行分组{1}}喜欢:
Hour
答案 1 :(得分:4)
我认为该列确实存储了DateTime
,您可以按Date
+ Hour
进行分组:
var hourGroups = dataTable.AsEnumerable()
.Select(row => new { DateAndTime = row.Field<DateTime>("dateAndTime"), Row = row })
.GroupBy(x => new { Date = x.DateAndTime.Date, Hour = x.DateAndTime.Date.Hour });
foreach (var x in hourGroups)
Console.WriteLine("Date: {0} Hour: {1}: Count: {2} All names: {3}",
x.Key.Date.ToShortDateString(),
x.Key.Hour,
x.Count(),
string.Join(",", x.Select(xx => xx.Row.Field<string>("name")))); // just bonus