2013-06-17 4 views
2

EF에서 각 사람의 총 시간을 계산하려고합니다. MYSQL 명세서에서 총 시간을 계산할 수는 있지만 EF에는 문제가 있습니다. Entity Framework - groupby 및 timespan 계산

은 SQL 문을 내가 EF에 위의 문을 변환 할

SELECT name, SEC_TO_TIME(Sum(TIME_TO_SEC(TIMEDIFF(ClockOutTime,ClockInTime)))) 
FROM Attendance 
GROUP BY name 

입니다.

는 지금까지 컨트롤러가 무엇

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 반환, 따라서 나는 direcly SqlFunctions.DateDiff를 사용할 수 있다는 것입니다이 문제 . 이 문제를 어떻게 해결합니까? 다른 방법이 있습니까?

답변

2

각 출석 시간을 선택하고 초를 계산하는 경우 BTW 왜 재산을 시간 이름

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

을 그룹화 한 후 합계 계산을 할 수 있습니까?

+1

정말 고마워요! 속성 이름을 지적 해 주셔서 감사합니다. 나는 그 이름을 선택하는 것에 대해별로 신중하지 않았습니다. – Lin