我正在尝试在LINQ中实现一个查询,该查询在ON子句中使用带有多个条件的左外部联接。
我将使用以下两个表的示例
项目
(ProjectID、ProjectName)和
任务
(TaskID、ProjectID、TaskName、已完成)。我想要查看所有项目及其各自任务的完整列表,但仅查看那些已完成的任务。
我不能使用筛选器
因为这将过滤掉所有未完成任务的项目。相反,我想添加
添加到连接的ON子句,以便显示项目的完整列表,但只显示已完成的任务。没有已完成任务的项目将显示一行,其中Task的值为null。
以下是查询的基础。
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子句吗?
我似乎找不到任何关于如何做到这一点的LINQ文档。
发布于 2011-10-06 00:47:24
您只需在两端将匿名属性命名为相同的名称
on new { t1.ProjectID, SecondProperty = true } equals 
   new { t2.ProjectID, SecondProperty = t2.Completed } into j1基于@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 }发布于 2013-06-04 20:39:55
在这里,你可以使用:
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 }发布于 2011-10-06 00:51:42
你不能这样做。The The The
子句(和
扩展方法)仅支持等值联接。这也是为什么它使用
而不是
..。即使你能做这样的事情,它也不会起作用,因为
是内联接,而不是外联接。
https://stackoverflow.com/questions/7664727
复制相似问题