我想计算EF中每个人的总小时数。 我可以用MYSQL语句计算总小时数,但我遇到EF问题。
这是SQL语句
SELECT name, SEC_TO_TIME(Sum(TIME_TO_SEC(TIMEDIFF(ClockOutTime,ClockInTime))))
FROM Attendance
GROUP BY name
我想将上述语句转换为EF。
这是我到目前为止在控制器中的作用
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.Select(a => a.ClockInTime)返回IEnumrable,因此我不能直接使用SqlFunctions.DateDiff。我该如何解决这个问题?有替代方式吗?
答案 0 :(得分:2)
您可以为每次出勤选择小时数,并在分组后进行总计计算
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为什么你在计算秒数时命名属性小时?