实体框架-分组和时间跨度计算
本文关键字:时间跨度 计算 框架 -分 实体 | 更新日期: 2023-09-27 18:18:37
我想计算EF中每个人的总工时。我可以计算MYSQL语句中的总小时数,但我有EF问题。
SQL语句
SELECT name, SEC_TO_TIME(Sum(TIME_TO_SEC(TIMEDIFF(ClockOutTime,ClockInTime))))
FROM Attendance
GROUP BY name
我想把上面的语句转换成EF。
这是我目前在controller
中看到的内容 var model = db.Attendances
.GroupBy(a => a.name)
.Select(g => new AttendanceViewModel
{
name = g.Key,
totalHours = SqlFunctions.DateDiff("seconds",
g.Select( a=> a.ClockInTime),
g.Select(a=>a.ClockOutTime))
}).ToList();
我的问题是,g.s select (a=>a.ClockInTime)返回IEnumrable,因此我不能使用SqlFunctions。DateDiff direcly。如何解决这个问题?有别的办法吗?
您可以为每次出勤选择小时数,分组后进行合计计算
db.Attendances
.Select(a => new {
a.name,
hours = SqlFunctions.DateDiff("seconds", a.ClockInTime, a.ClockOutTime)
})
.GroupBy(x => x.name)
.Select(g => new AttendanceViewModel {
name = g.Key,
totalHours = Sum(x => x.hours)
})
.ToList();
BTW为什么你命名属性小时如果你计算秒?