В принципе, у меня много компаний, которые могут иметь много офисов, как мне получить мой запрос, чтобы показать это, у меня есть:
Проблема (или мне так кажется), я получаю компанию 3 раза (пример ниже), когда мне нужно получить только одну компанию и несколько офисов, мой запрос просто неверен?
//companies = _repo.All<Companies>();
//mainoffice = _repo.All<Office>();
var dto = companies
.Join(mainoffice, x => x._ID, y => y.CompanyID, (x, y) => new
{
mycompany = x,
myoffice = y,
})
.Select(x => new
{
ID = x.mycompany._ID,
Offices = x.myoffice
});
![enter image description here](https://i.stack.imgur.com/WLtPx.png)
Однако, если я присоединяюсь к группе, я получаю то, что хочу , но Я возвращаю компании, у которых нет офисов ...
var dto = companies
.GroupJoin(mainoffice, x => x._ID, y => y.CompanyID, (x, y) => new
{
mycompany = x,
myoffice = y,
})
.Select(x => new
{
ID = x.mycompany._ID,
Offices = x.myoffice
});
Обновление: еще 1 вложенный набор результатов ...
var areascovered = repo.All<OfficePostCode>();
var filter = repo.All<PostCodeDistrict>()
.Where(x => x.Region.StartsWith(postcode))
.Join(areascovered, x => x.PostCodeID, y => y.PostCodeID, (x, y) =>
new
{
Postcode = x.PostCode,
Region = x.Region,
OfficeID = y.OfficeID
});
var mainoffice = repo.All<Office>();
var dto = companies
.Select(company => new
{
ID = company._ID,
Offices = mainoffice.Select(office => new
{
CompanyID = office.CompanyID,
Name = office.Name,
Tel = office.Tel,
RegionsCovered = filter.Where(f => f.OfficeID == office.OfficeID)
})
.Where(y => y.CompanyID == company._ID)// && y.RegionsCovered.Any())
})
.Where(pair => pair.Offices.Any());