Как использовать Left Join в запросе My LINQ to EF? - PullRequest
0 голосов
/ 03 января 2019

Мой запрос LINQ to EF:

var query = (from r in DB.region
             join g in DB.governorate on r.region_id equals g.region_id
             join s in DB.IndividualReports on g.governorate_id equals s.governorate_id
             join t in DB.AgencyReports 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
                {
                    RId= grp.Key.region_id,
                    RName=grp.Key.region_name,
                    IndividualCount = grp.Select(s => s.s.Id).Distinct().Count(),
                    AgencyCount = grp.Select(t => t.t.Id).Distinct().Count()
                }
            ).ToList().Select(s => new CitysWithComplaintsall
            {
                CityId = s.RId,
                City_NM = s.RName,
                Num_Complaints_Agency = s.IndividualCount,
                Num_Complaints_Ind = s.AgencyCount
            }).ToList();

Я хочу добавить левое соединение везде вместо простого соединения.

Тот же запрос в SQL Server с левым соединением выглядит так:

select 
    R.region_id, R.region_name, 
    count(IR.Id) as Individual, 
    count(AR.Id) as Agency 
from 
    region R 
left join 
    governorate G on r.region_id = g.region_id
left join 
    IndividualReports IR on g.governorate_id = IR.governorate_id
left join 
    AgencyReports AR on g.governorate_id = AR.governorate_id
group by 
    R.region_id, R.region_name

Еще одна вещь заключается в том, что этот необработанный запрос SQL возвращает какой-то другой результат, если я пытаюсь изменить этот запрос для проверки количества, измените его на:

select  
    R.region_id, R.region_name,
    count(AR.Id) as Agency 
from 
    region R 
left join 
    governorate G on r.region_id = g.region_id
left join 
    AgencyReports AR on g.governorate_id = AR.governorate_id
group by 
    R.region_id, R.region_name

SQL-запросы возвращают немного другоерезультат.

...