Мой запрос 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-запросы возвращают немного другоерезультат.