Linq分组的时间段

时间:2015-03-15 09:58:40

标签: c# sql sql-server linq entity-framework

我有一个按日期时间分组的查询,我想按日期时间和时间段进行分组。(早上,晚上)

from f in _db.Visits
where f.VisitDate >= sdate && f.VisitDate <= edate
group f by new { f.VisitDate, f.Personnel }
into myGroup
where myGroup.Any()
 select new
   {
    myGroup.Key.VisitDate,
    myGroup.Key.Personnel.Name,
    myGroup.Key.Personnel.Family,
    VisitType = myGroup.GroupBy(f => f.VisitTypeId).Select
    (m => new { Count = m.Count(), Id = m.Key, Total = m.Sum(c => c.Amount) })
    }

例如,选择2015/10/10早上,2015/10/10晚上的项目

1 个答案:

答案 0 :(得分:0)

你可以尝试:

group f by new 
{
    VisitDate = DbFunctions.TruncateTime(f.VisitDate), 
    Morning = f.VisitDate.Hour < 13, 
    f.PersonnelId 
}

其中13是你下午早上截断的小时。

DbFunctions.TruncateTime(f.VisitDate) 

返回没有时间的日期(请注意,如果EF <6.0,则必须使用EntityFunctions.TruncateTime(f.VisitDate))

f.VisitDate.Hour

返回日期的小时,所以

f.VisitDate.Hour < 13 

早上true,下午false