Comment écrire une requête SQL complexe à l'aide d'Entity Framework?

Je dois écrire une requête SQL complexe en utilisant Entity Framework, mais je n'arrive pas à comprendre comment les combiner, mais en même time avoir un code avec une exécution optimale.

Voici ma requête 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); 

Et voici ce que j'ai essayé d'utiliser 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; 

Quelqu'un peut-il m'aider avec quelques idées? Merci.

voici la façon de le faire avec LINQ en utilisant un type anonyme:

  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); } 

Ce qui précède projette les valeurs groupées sur un nouveau type anonyme. Vous pouvez les projeter sur un object fortement typé si vous le souhaitez. Le point est que lorsque vous faites GroupBy vous créez une nouvelle collection d'IGrouping. Vous n'avez plus affaire à une list de votre model.