2009-08-31 3 views
5
  • Entity Framework를 통해 Datetime 필드에서 평균 시간을 얻는 방법은 무엇입니까?
  • 어떻게 다른 날짜에서 하나의 날짜를 뺍니까?

내가 좋아하는 뭔가를 생각하고 :DB에서 평균 날짜 시간을 얻고 다른 날짜를 뺍니다.

ObjectQuery<Visit> visits = myentitys.Visits; 
      var uQuery = 
      from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes) 
      }; 

가 날별로 그룹화 방문자의 평균 체류 시간을 얻을 수 있습니다.

답변

1

나는 데이터베이스에서 데이터를 얻고 메모리의 평균 기능을 수행하려고합니다. 내가 ... perfomances에 미치는 영향이 될 수 모르겠어요 입력해도

  List<Visit> visits = myentitys.Visits.ToList();//Get the Visits entities you need in memory, 
              //of course,you can filter it here 
      var uQuery = 
      from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes) 
      }; 
연산 이런 종류의 SQL 쿼리로 변환 할 수 없습니다

(예외가 말한다처럼 : DbArithmeticExpression 인수가 숫자 일반적인 유형이 있어야합니다) 하지만 메모리에있는 객체를 사용하는 것이 가능합니다.

희망이 도움이됩니다.

+1

나는 이것을 더 좋아한다. 당신은 SQL 함수에 묶이지 않습니다. 왜 당신이 투표를했는지 모르겠습니다. –

+0

+1, @ Kirk +1, 오히려 마침내 비 SQL 서버에 대한 옵션도 필요하다는 것을 알고 싶습니다. – Maslow

7

백업 저장소가 SQL Server라고 가정하면 다음과 같이 수행 할 수 있습니다. 그건 그렇고, 나는 오타라고 가정 한 것을 수정했다. 당신은 Hours라는 필드에 총 시간 (분)을 지정했다. 나는 미래의 관객을 위해 필드를 분으로 변경했습니다.

ObjectQuery<Visit> visits = myentitys.Visits; 
var uQuery = from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Minutes = g.Average(visit => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", visit.LeaveTime.Value, visit.ArrivalTime.Value)) 
      }; 

은 LINQ 엔티티에 참조 DateDiff에 날짜 시간 감산 극한 변환을 지원하고 그 결과로서 시간 범위 오브젝트를 생성하지 않는 것을 실망시킨다.

+0

+1 유용한 답변. – Maslow

+1

+1 "LINQ to Entities가 DateTime의 본질적인 변환을 지원하지 않는다는 사실에 실망합니다" – billy

관련 문제