我必须使用Entity Framework编写一个复杂的SQL查询,但我无法弄清楚如何组合它们,但同时要有一个具有最佳执行的代码。
这是我的SQL查询:
Select DATEPART(HOUR,Datetime),AVG(temperature1),AVG(temperature2),AVG(humidity1),
from Table ,
where Day(Datetime)=@param,
group by DATEPART(HOUR,Datetime),
order by DATEPART(HOUR,Datetime);
以下是我尝试使用Entity Framework的内容:
List<Greenhouse> greenhouse = context.Greenhouses
.Where(x => x.Datetime.Day == DtFrom.Day && x.Datetime.Month == DtFrom.Month && x.Datetime.Year == DtFrom.Year).ToList();
//.GroupBy(x => x.Datetime.Hour).ToList;
任何人都可以帮我一些想法吗?谢谢。
答案 0 :(得分:3)
这里是使用匿名类型LINQ的方法:
var output = context.Greenhouses
.Where(x => x.Datetime.Date == DtFrom.Date)
.GroupBy(x => x.Datetime.Hour)
.Select(y => new
{
hour = y.Key,
temp1 = y.Average(t1 => t1.temperature1),
temp2 = y.Average(t2 => t2.temperature2),
humidity = y.Average(h => h.humidity)
});
foreach(var avgData in output)
{
Console.WriteLine("{0} {1} {2} {3}", avgData.hour, avgData.temp1, avgData.temp2, avgData.humidity);
}
以上是将分组值投影到新的匿名类型上。如果您愿意,可以将它们投影到强类型对象上。关键是当你进行GroupBy时,你创建了一个新的IGrouping集合。您不再处理模型列表。