単純な SQL をラムダ 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
}
またはラムダ
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 のようなエンティティ フレームワークの場合は、わずかに異なります。つまり、データ コンテキストまたは適切な 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)
}