2

我想计算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。我该如何解决这个问题?有替代方法吗?

4

1 回答 1

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();

顺便说一句,如果您计算秒数,为什么要命名属性小时?

于 2013-06-17T08:41:48.260 回答