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 に答える