从按日期(日期间隔)分组的数据表中获取记录

时间:2018-09-19 06:17:50

标签: c# linq

我有一个数据表,其列为namecodedateAndTime。现在,我想使用LINQ来获取一天中每小时的所有记录数。

DateTime列包含的数据为

2018-08-01 07:00:06.163
2018-08-01 07:50:11.873
2018-08-01 08:00:42.623
2018-08-01 07:20:48.363
2018-08-01 09:01:15.243
2018-08-01 06:01:16.507

现在我想获取从一天开始到现在(可能是1年或6个月)的所有记录的计数。

示例为: 如果第一笔记录是在2018-08-01上午5点左右,那么它以2018-08-01作为第一行开始

2018-08-01  7   - 36 count
2018-08-04  9   - 12 count
2018-08-07  11  - 12 count
2018-08-10  13  -  0 count
2018-08-13  15  - 36 count

我只希望12行,所以时间间隔被划分为12个相等的部分,可能是某天或某月。

1 个答案:

答案 0 :(得分:0)

如果我了解您要按小时对记录进行分组。您可以在此处按小时分组。假设您有一个员工类别声明为:

 static List<Employee> employees = new List<Employee>
    {
        new Employee {FirstName = "Marc",date = DateTime.Now.AddHours(1) },
        new Employee {FirstName = "John", date = DateTime.Now.AddHours(1) },
        new Employee {FirstName = "Robin",date = DateTime.Now.AddHours(2) },
        new Employee {FirstName = "Mike", date = DateTime.Now.AddDays(2) }
        };

然后您可以通过按小时分组来每小时对记录进行分组。以下代码可能会帮助您:

var emps = from employee in employees
                             group employee by employee.date.Hour into empGroup
                             select new
                             {
                                 key = empGroup.Key,
                                 items = empGroup
                             };

            foreach(var item in emps)
            {
                foreach(var groupItems in item.items)
                {
                    Console.WriteLine("group ");
                    Console.WriteLine("item={0} value={1} count={2}", item.key, groupItems.FirstName,item.items.Count());
                }

            }