Как получить среднее значение по категориям, если ссылки на подкатегории указаны в таблице результатов? - PullRequest
0 голосов
/ 01 февраля 2019

У меня проблемы с написанием LINQ для расчета среднего значения на основе столбца, на который нет прямой ссылки.

Укажите фон и расскажите, что вы уже пробовали.

У меня есть следующие таблицыТеперь я хочу получить средние оценки по категориям и подкатегориям, но выборка через TopicId (FK) в таблице результатов будет большой задачей.(Я пытался и не мог понять, как это сделать)

Изображение с таблицами

Как я могу получить средние оценки для категории и подкатегории?

1 Ответ

0 голосов
/ 01 февраля 2019

Это запрос SQL, который вам нужен:

select 
    c.Id as CategoryId, 
    c.CategoryName,
    sc.Id as SubCategoryId,
    sc.SubCategoryName,
    AVG(r.Marks) as Average
from Result r
join Topic t on r.TopicId = t.Id
join SubCategory sc on t.SubCategoryId = sc.Id
join Category c on sc.CategoryId = c.Id
group by c.Id, c.CategoryName, sc.Id, sc.SubCategoryName

И то же самое с синтаксисом запроса LINQ:

using (var db = new TopicContext())
{
    // build the query
    var query =
        from r in db.Result
        join t in db.Topic on r.TopicId equals t.Id
        join sc in db.SubCategory on t.SubCategoryId equals sc.Id
        join c in db.Category on sc.CategoryId equals c.Id
        group r by new { c.Id, c.CategoryName, SubCategoryId = sc.Id, sc.SubCategoryName } into gr
        select new
        {
            CategoryId = gr.Key.Id,
            CategoryName = gr.Key.CategoryName,
            SubCategoryId = gr.Key.SubCategoryId,
            SubCategoryName = gr.Key.SubCategoryName,
            Average = gr.Average(x => x.Marks)
        };

    // ToList() method executes the query, so we get the result on that line of code
    var result = query.ToList();
}

Если у вас есть существующая база данных, вы можете использовать EF Core для генерации собственного dbContext (в моем примере это класс TopicContext) с помощью команды Scaffold-DbContext.Вы можете найти пример этой команды на этой странице .Чтобы использовать эту команду, вы должны установить пакет Microsoft.EntityFrameworkCore.Tools nuget вместе с Microsoft.EntityFrameworkCore.SqlServer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...