我正在尝试在LINQ中实现一个查询,该查询在ON子句中使用具有多个条件的左外连接.
我将使用以下两个表Project(ProjectID,ProjectName)和Task(TaskID,ProjectID,TaskName,Completed)的示例.我想查看所有项目的完整列表及其各自的任务,但只查看已完成的任务.
我不能使用过滤器,Completed == true
因为这将过滤掉任何没有完成任务的项目.相反,我想添加Completed == true
到连接的ON子句,以便显示完整的项目列表,但只显示已完成的任务.没有完成任务的项目将显示一行,其中任务为空值.
这是查询的基础.
from t1 in Projects
join t2 in Tasks
on new { t1.ProjectID} equals new { t2.ProjectID } into j1
from j2 in j1.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
Run Code Online (Sandbox Code Playgroud)
如何添加&& t2.Completed == true
on子句?
我似乎无法找到任何关于如何执行此操作的LINQ文档.
Adu*_*cci 115
您只需要将双方的匿名属性命名为相同
on new { t1.ProjectID, SecondProperty = true } equals
new { t2.ProjectID, SecondProperty = t2.Completed } into j1
Run Code Online (Sandbox Code Playgroud)
根据@svick的评论,这是另一个可能更有意义的实现:
from t1 in Projects
from t2 in Tasks.Where(x => t1.ProjectID == x.ProjectID && x.Completed == true)
.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
Run Code Online (Sandbox Code Playgroud)
Nal*_*ran 32
在这里你去:
from b in _dbContext.Burden
join bl in _dbContext.BurdenLookups on
new { Organization_Type = b.Organization_Type_ID, Cost_Type = b.Cost_Type_ID } equals
new { Organization_Type = bl.Organization_Type_ID, Cost_Type = bl.Cost_Type_ID }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112435 次 |
最近记录: |