2009-11-05 68 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