使用GroupBy和Average将SQL转换为lambda LINQ

我花了几个小时试图将简单的SQL翻译成lambda LINQ

SELECT ID, AVG(Score) FROM myTable GROUP BY ID 

任何的想法?

 from t in myTable group t by new { t.ID } into g select new { Average = g.Average(p => p.Score), g.Key.ID } 

或者Lambda

 myTable.GroupBy(t => new {ID = t.ID}) .Select (g => new { Average = g.Average (p => p.Score), ID = g.Key.ID }) 

Linq-to-Objects中的等价物如下所示。

 var results = from row in myTable group row by row.Id into rows select new { Id = rows.Key, AverageScore = rows.Average(row => row.Score) }; 

对于类似ORM的entity framework,它只是略有不同。 也就是说,您需要遍历数据上下文或适当的DbSet / ObjectSet。

 var _result = from a in myTable group a by a.ID into g select new { ID = g.Key.ID, AverageResult = g.Average(x => x.Score) }