2009-11-05 65 views
0

新建LINQ。我很好奇,語法做下面的SQL查詢在LINQLINQ語法幫助:投影和分組

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

我有什麼至今:

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執行。

任何幫助非常感謝!

回答

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

幾秒+1 – 2009-11-05 17:20:44

+1

很好抓的「maxTemps」,而不是「minTemps」打我*嘻嘻* – andyp 2009-11-05 17:21:27

+0

準確我在找什麼謝謝你。現在我可以使用它作爲數據源並將其綁定到網格 – Will 2009-11-05 17:26:01

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 2009-11-05 18:07:19

+0

你的答案是正確的(+1)。我只是想提供替代方案。我傾向於發現很多我的初級配偶傾向於將Linq視爲C#中的一個小插件,並且沒有看到功能性方法的更大亮點。當我將它們暴露給函數語法時,接下來就是啓發式。 – 2009-11-06 09:11:51