【发布时间】:2011-02-24 19:44:31
【问题描述】:
我是 LINQ 的新手。我正在使用 LINQ to Objects(我认为)并且数据的设置方式我无法直接获取我需要的数据。 这是我需要做的一般结构:
FROM Project
LEFT OUTER JOIN TechnologySectors
LEFT OUTER JOIN SelectedAgencies
LEFT OUTER JOIN ProjectStatus
JOIN Process
我需要来自 Process 的单条数据。
到目前为止,我已经弄清楚如何使用DefaultIfEmpty() 使用 LINQ 进行 LEFT OUTER JOIN,但我无法弄清楚如何使用 ProjectStatus 让 Process 加入。
到目前为止我有这个(ps是ProjectStatus):
join ec in this._Process.GetProcessList() on ps.ProcessID equals ec.ProcessID into psec
但这给了我一个关于“ps不在等号左侧范围内”的错误。
编辑
为了参考起见,我包含的“加入”并不是整个陈述。 “ProjectStatus”(ps)加入了“Project”(pr),我也需要加入“Process”(ec)。
ec 和 pr 没有直接关系,所以必须通过 ps 加入。
翻转“on”语句并不能解决问题。
编辑 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()
【问题讨论】:
标签: linq join linq-to-objects left-join