LINQ语法帮助:投影和分组

时间:2009-11-05 17:13:28

标签: c# linq linq-to-sql

LINQ的新手。我很好奇在LINQ中执行以下SQL查询的语法

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:无法将节点“New”格式化为SQL执行。

任何帮助非常感谢!!

2 个答案:

答案 0 :(得分: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 )
               };

答案 1 :(得分:2)

或者我倾向于更喜欢的功能方法:

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