Я новичок в LINQ.Я использую LINQ to Objects (я думаю) и способ настройки данных, я не могу напрямую получить нужную часть данных.Это общая структура того, что мне НУЖНО сделать:
FROM Project
LEFT OUTER JOIN TechnologySectors
LEFT OUTER JOIN SelectedAgencies
LEFT OUTER JOIN ProjectStatus
JOIN Process
Мне нужен один фрагмент данных из Process.
До сих пор я выяснил, как сделать LEFT OUTER JOIN с LINQ, используяDefaultIfEmpty()
, но я не могу понять, чтобы получить Process для JOIN с ProjectStatus.
Пока у меня есть это (ps is ProjectStatus):
join ec in this._Process.GetProcessList() on ps.ProcessID equals ec.ProcessID into psec
, но это дает мне ошибку о "ps notв области на левой стороне равно ".
РЕДАКТИРОВАТЬ
Для справки, "соединение", которое я включил, не является полным утверждением.«ProjectStatus» (ps) присоединяется к «Project» (pr), и мне нужно также присоединить «Process» (ec).
ec не имеет никакого отношения напрямую к pr, и поэтому его необходимо соединить через ps.Переключение операторов on не решает проблему.
EDIT 2
Полный запрос LINQ:
from pr in this._projectRepo.GetAllProjects()
join tr in this._techRepo.GetTechnologySectors() on pr.TechnologySectorID equals tr.TechnologySectorID into prtr
join ev in this._ecEnvRepo.GetAllSelectedAgencies() on pr.ID equals ev.ID into prev
join ps in this._ecProjectStatRepo.GetAllECProjectStatus() on pr.ID equals ps.ID into prps
***THIS LINE***join ec in this._ecProcessRepo.GetProcessList() on ps.ProcessID equals ec.ProcessID into psec
from tr in prtr.DefaultIfEmpty()
from ev in prev.DefaultIfEmpty()
from ps in prps.DefaultIfEmpty()
from ec in psec.DefaultIfEmpty()
Это не работает.
Я также пытался извлечь эту строку и просто использовать это:
from ec in this._ecProcessRepo.GetProcessList() where (ec.ProcessID == ps.ProcessID)
И я попытался использовать это вместо строк ps и ec:
from ps in this._ecProjectStatRepo.GetAllECProjectStatus() where (ps.ID == pr.ID)
join ec in this._ecProcessRepo.GetProcessList() on ps.ProcessID equals ec.ProcessID into psec
from ec in psec.DefaultIfEmpty()