Как получить данные в соединении Linq to EF между четырьмя таблицами, используя count? - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь получить данные с помощью Linq для Ef. Я новичок в Linq,

У меня есть таблицы,

*region having region_id , region_name
*governorate having governorate_id,governorate_name, region_id
*Student having id,governorate_id
*Teachers having id,governorate_id

Я хочу найти количество студентов и преподавателей в каждом регионеиспользуя один запрос linq to EF

Я пытаюсь сделать это в SQL-запросе, как только для студента,

select R.region_id,R.region_name , count(IR.Id) as Individual from region R 
inner join governorate G
           on r.region_id=g.region_id
inner join Student IR
            on g.governorate_id=IR.governorate_id
group by R.region_id,R.region_name

Надежды на ваши предложения

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Поскольку вы также используете Ef, я бы посоветовал вам правильно настроить отношения между сущностями, чтобы вам не нужно было создавать запрос на соединение самостоятельно (и использовать предложение Include).

Например:

public class Region
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Governorate> Governorates { get; set; }
}

public class Governorate
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int RegionId { get; set; }
    public Region Region { get; set; }

    public ICollection<Student> Students { get; set; }
}

public class Student
{
    public int Id { get; set; }

    public int GovernorateId { get; set; }
    public Governorate Governorate { get; set; }
}

Надеюсь, это поможет вам,

Обновите запрос, который может помочь вам:

var result = whatever.Regions
            .Include(r => r.Governorates)
            .ThenInclude(g => g.Students)
            .GroupBy(r => new {r.Id, r.Name})
            .Select(g => new
            {
                g.Key.Id,
                g.Key.Name,
                Individual = g.Count(r => r.Id)
            }).ToList();

С уважением

0 голосов
/ 25 декабря 2018

Для подсчета студентов и преподавателей в одном запросе:

var teachersStudents =
    (
        from r in db.Region
        join g in db.Governorate on r.region_id equals g.region_id
        join s in db.Student on g.governorate_id equals s.governorate_id
        join t in db.Teacher on g.governorate_id equals t.governorate_id
        group new { r, s, t } by new { r.region_id, r.region_name }
        into grp
        select new
        {
            grp.Key.region_id,
            grp.Key.region_name,
            CountStudents = grp.Select(s => s.s.id).Distinct().Count(),
            CountTeachers = grp.Select(t => t.t.id).Distinct().Count()
        }
    ).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...