I'm trying to convert a SQL query to Linq for an ASP.NET MVC 5 controller.
SELECT TOP (10)
E.Surname, E.Name, E.Patronymic, AVG(CAST(IEEResult1 AS FLOAT))
FROM
IEEResults AS I
JOIN
Enrollee AS E ON E.Id = I.EnrolleeId
GROUP BY
I.EnrolleeId, E.Surname, E.Name, E.Patronymic
ORDER BY
AVG(CAST(IEEResult1 AS FLOAT)) DESC;
This is the answer. Thank you afrazier very much!
var result = db.IEEResults
.Join(db.Enrollees, r => r.EnrolleeId, e => e.Id, (r, e) => new { e.Id, e.Surname, e.Name, e.Patronymic, r.IEEResult1 })
.GroupBy(a => new { a.Id, a.Surname, a.Name, a.Patronymic })
.Select(gr => new IEEResultsDTO
{
Id = gr.Key.Id,
Surname = gr.Key.Surname,
Name = gr.Key.Name,
Patronymic = gr.Key.Patronymic,
AvgResult = gr.Average(a => a.IEEResult1)
})
.OrderByDescending(b => b.AvgResult)
.Take(10)
.ToList().AsEnumerable();
return View(result);