17

나는 날짜 / 시간 필드의 날짜 부분에서 Linq 그룹을 수행하려고합니다.

이 linq 문은 작동하지만 날짜와 시간별로 그룹화됩니다.

var myQuery = from p in dbContext.Trends
          group p by p.UpdateDateTime into g
          select new { k = g.Key, ud = g.Max(p => p.Amount) };

그룹화 할 때이 문을 실행할 때 다음과 같은 오류가 발생합니다.

var myQuery = from p in dbContext.Trends
          group p by p.UpdateDateTime.Date into g   //Added .Date on this line
          select new { k = g.Key, ud = g.Max(p => p.Amount) };

지정한 형식 멤버 'Date'는 LINQ to Entities에서 지원되지 않습니다. 이니셜 라이저, 엔티티 구성원 및 엔티티 탐색 특성 만 지원됩니다.

날짜와 시간이 아닌 그룹별로 어떻게 그룹을 만들 수 있습니까?


  • Linq에서 SQL로 똑같은 코드가 작동하기 때문에 이상합니다! - azamsharp

3 답변


32

사용EntityFunctions.TruncateTime방법:

var myQuery = from p in dbContext.Trends
          group p by EntityFunctions.TruncateTime(p.UpdateDateTime) into g
          select new { k = g.Key, ud = g.Max(p => p.Amount) };


  • 이 작동합니다. 그것도 작동하는 다른 솔루션보다 조금 깨끗합니다. 감사! - twamn
  • 그것은 다른 시간대가 사용되는 경우를 제외하고 모든 경우에 작동합니다. 그런 다음 그룹화도 시간대로 수행됩니다. Ive는 여기에 나쁜 해결책을 게시했으며 som을 사용하여 코드를보다 명확하게 만들 수 있습니다.엔티티 그룹에 대한 .NET LINQ (날짜 별) - Zeezer
  • 감사. 나는 이것을 며칠 동안 찾고 있었다. 너는 남자 야. - Dudipoli

5

가능한 해결책이리이것은 패턴을 따른다.

var q = from i in ABD.Listitem
    let dt = p.EffectiveDate
    group i by new { y = dt.Year, m = dt.Month, d = dt.Day} into g
    select g;

따라서 귀하의 질의 [untested]에 대해 :

var myQuery = from p in dbContext.Trends
      let updateDate = p.UpdateDateTime
      group p by new { y = updateDate.Year, m = updateDate.Month, d = updateDate.Day} into g
      select new { k = g.Key, ud = g.Max(p => p.Amount) };


  • 이것은 하나의 작은 모드에서 작동합니다. "~ g" 세 번째 줄의 끝에 추가해야합니다. 감사! - twamn
  • 하지만 EF 4.0을 사용하는 경우 만족스러운 해결책이 더 좋다고 말합니다. 이전에는 EntityFunctions 유틸리티를 인식하지 못했습니다. - Pero P.

0

사용할 수 없습니다.DateTime.DateLinq-to-Entities 쿼리에서. 입력란을 명시 적으로 그룹화하거나Date필드에 표시됩니다. (나는 같은 문제를 겪었다.Datedb의 필드, 결코 뒤돌아 보지 마십시오).

연결된 질문


관련된 질문

최근 질문