2010-02-15 2 views
2

일부 특정 형식을 반환하고 싶은 다소 복잡한 쿼리가 있습니다.집계 LINQ 쿼리의 Entity Framework 개체 제한

지정된 타입의 멤버 '날짜'가 는 LINQ에서 지원되지 않습니다 : 대부분 날짜/시간 계산 또는 문자열 값을 직결 된 엔티티 프레임 워크는 내가 System.DateTime 유형과 더 새로운 것을 시도 할 때 더미 침 것으로 ​​보인다 엔티티에. 초기화 도구, 엔터티 멤버 및 엔터티 탐색 속성 만 을 지원합니다.

문제의 쿼리는 다음과 같습니다 위의 쿼리에서

// Here comes the aggregate query. 
    object summary = from te in ctx.TimeEntries 
        where te.StartTime >= startofweek 
        && te.UserName == User.Identity.Name 
        group te by te.StartTime.Day into Groups 
        select new 
        { 
         Key = Groups.Key, 
         Count = Groups.Count(), 
         //Total = Groups.Sum(n => (double)((n.EndTime ?? DateTime.Now) - n.StartTime).TotalMinutes/60), 
         Tasks = from t in Groups 
           orderby t.StartTime descending 
           select new 
           { 
            Name = t.Task.TaskName, 
            Project = t.Task.Batch.Project.ProjectName, 
            Batch = t.Task.Batch.BatchName, 
            //Minutes = ((t.EndTime ?? DateTime.Now) - t.StartTime).Minutes, 
            Start = t.StartTime.Date, 
            Stop = t.EndTime, 
            Description = t.Notes, 
            Breaks = t.BreakFor ?? 0 
           } 
        }; 

이 재산 "시작"는 상기 오류와 함께 실패합니다. 그러나, 단순히 "Start = t.StartTime"이라면 모든 것이 잘될 것입니다. 마찬가지로 "Minutes"에 대한 주석 처리 된 값도 문제를 일으킬 수 있습니다.

제안을 환영합니다.

답변

3

L2E 쿼리에서 지원되는 멤버 만 사용할 수 있으며 Date isn't one of those입니다.

한 가지 해결 방법은 개체 쿼리 한 LINQ 다음에 하나 개 L2E 쿼리로 단일 L2E 쿼리를 파괴하는 것입니다 아마 쿼리로 시작하는 자세한 방법을 주어진 나쁜 일이되지 않을 것

var q = from e in Context.Entities 
     select new 
     { 
      Id = e.Id, 
      DateTime = e.DateTime 
     }; 

var r = from e in q.AsEnumerable() 
     select new 
     { 
      Id = e.Id, 
      Date = e.DateTime.Date 
     }; 
+0

어쨌든. 나는 총을 내고 그것이 어떻게 보이는지 볼 것이다. 감사. –

+0

그래, 그것은 치료를했습니다. 내 코드를 좀 더 우아하게 만들지는 않았지만 내가했던 자유를 확실히 제공했다. 다시 한번 감사드립니다. –