2009-11-05 3 views
0

새로운 그룹화 .. 나는 지금까지 무엇을 가지고 LINQ 구문 도움말 : 프로젝션 및 LINQ에

SELECT MAX(TMPS), DAY FROM WEATHERREADINGS 
GROUP BY WEATHERREADINGS.DAY 

LINQ

에서 다음 SQL 쿼리를 할 수있는 구문으로 궁금 :

var minTemps = from ps in ww.WEATHERREADINGS 
       group ps by ps.DATE.Hour into psByHour 
       select new 
       { 
        HourOfDay = psByHour.Max().DATE.Hour, 
        MaxTemp = psByHour.Max().TMPS 
       }; 

이 작업을 수행하는 동안 다음 오류가 발생합니다.

예외 정보 : System.InvalidOperationException : SQL로 실행하기 위해 노드 'New'의 형식을 지정할 수 없습니다.

대단히 감사합니다!

답변

6

다음과 같이 생각합니다. 그룹화에서 키를 가져올 수 있으므로 거기에 집계 할 필요가 없습니다. 다른 항목에 대해 집계를 수행 할 항목을 선택하는 메커니즘을 제공해야합니다.

var maxTemps = from ps in ww.WEATHERREADINGS 
       group ps by ps.Date.Hour into psByHour 
       select new 
       { 
        HourOfDay = psByHour.Key, 
        MaxTemp = psByHour.Max(p => p.TMPS) 
       }; 
+0

몇 초 "maxTemps"+1 –

+1

좋은 캐치 대신 "minTemps"나를 때려 * ㅎㅎ * – andyp

+0

정확히 내가 뭘 찾고 있었는지 고맙다. 지금 내가 이것을 데이터 소스로 사용할 수 있고 그리드에 바인딩 할 수있다. – Will

2

또는 내가 좋아하는 경향이 기능적 접근 더 나은 :

var result = ww.WEATHERREADINGS 
       .GroupBy(a => a.Date.Hour) 
       .Select(a => new 
         { 
         Hour = a.Key, 
         Max = a.Max(b => b.TMPS) 
         }); 
+0

+1 동의한다. 그렇지 않으면 강력한 이유가없는 한 OP가 묻는 형식으로 대답하려고한다. – tvanfosson

+0

당신의 대답은 정확하고 정확합니다 (+1). 방금 대안을 제공하고 싶었습니다. 나는 많은 중학교 친구들이 Linq를 C#의 작은 SQL Addon으로 취급하는 경향이 있으며 기능 수행 방법의 더 큰 그림을 보지 못하는 경향이 있음을 발견합니다. 기능적 구문에 노출하면 enlightment가 수행됩니다. –