我正在尝试在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 }
如何在on子句中添加 && t2.Completed == true
?
我似乎无法找到任何关于如何执行此操作的LINQ文档 .
3 回答
您只需要将双方的匿名属性命名为相同
根据@svick的评论,这是另一个可能更有意义的实现:
在这里你去:
你不能这样做 .
join
子句(和Join()
扩展方法)仅支持equijoins . 这也是原因,为什么它使用equals
而不是==
. 即使你可以做类似的事情,它也行不通,因为join
是一个内连接,而不是外连接 .