我想计算每个人在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.Select( a=>a.ClockInTime) 返回 IEnumrable,因此我不能直接使用 SqlFunctions.DateDiff 。我该如何解决这个问题?还有其他方法吗?
最佳答案
您可以选择每次出勤的时间并在分组后进行总计计算
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();
顺便说一句,如果您计算的是秒,为什么您将属性命名为“小时”?
关于c# - Entity Framework - groupby 和时间跨度计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143359/