如何使用Entity Framework编写复杂的SQL查询?

时间:2015-08-09 19:56:23

标签: sql sql-server asp.net-mvc entity-framework

我必须使用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;

任何人都可以帮我一些想法吗?谢谢。

1 个答案:

答案 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集合。您不再处理模型列表。