LINQ-запросы из связанных таблиц для MVC
Дано три таблицы:
Students ключ Id
Rates ключи StudentId, DisciplineId
Disciplines ключ Id
То есть студентов может быть много, у каждого много предметов и оценок. Предмет один но у него может быть много оценок у разных студентов.
В MSSMS сочинил запрос:
select Name, SurName, SUM(Rates.Rate) as 'rate'
from Students join Rates on Students.id = Rates.StudentId
group by Students.Name, Students.SurName
Он выводит табличку, которую мне нужно вывести в ASP.NET MVC. Но перевести ее в язык Linq не выходит.
Код контроллера:
private DBConnect db = new DBConnect();
public async Task<ActionResult> SumRates()
{
var rates = db.Rates.Include(s => s.Students)
.GroupBy(x => x.Students.Id, x => x.Rate)
.Select(x => new { Name = x.Key, Rate = x.Sum() });
ViewBag.SR = rates.ToList();
return View();
}
Код View:
@foreach (var item in ViewBag.SR)
{
<tr>
<td>
@item
</td>
<td>
</td>
</tr>
}
Что выводит мой код:
Считать считает, но поделить это на таблицу или сделать вид как в MSSMS не выходит. Что делаю не так?
Ответы (1 шт):
Если бы вы опубликовали код ваших сущностей и пример заполнения таблиц данными, то давно бы получили ответ. Ведь никому неохота вручную набивать тот код, который у вас уже есть.
Для начала, создадим модель, которая будет содержат нужные данные:
public class StudentRateModel
{
public string Name { get; set; }
public string Surname { get; set; }
public int Rate { get; set; }
}
Навскидку, запрос должен выглядеть так:
var rates = db.Rates
.Include(s => s.Students)
.GroupBy(
x => x.Students,
(x, y) => new { Student = x, Sum = y.Sum(r => r.Rate) })
.Select(x => new StudentRateModel
{
Name = x.Student.Name,
Surname = x.Student.Surname,
Rate = x.Sum
});
Естественно, я его не проверял. Если приведёте необходимый код, я его протестирую.
Код во View:
<table class="table-bordered">
<tr>
<th>Name</th>
<th>Surname</th>
<th>Rate</th>
</tr>
@foreach (StudentRateModel item in ViewBag.SR)
{
<tr>
<td>@item.Name</td>
<td>@item.Surname</td>
<td>@item.Rate</td>
</tr>
}
</table>
