首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >On子句中具有多个条件的LINQ连接

On子句中具有多个条件的LINQ连接
EN

Stack Overflow用户
提问于 2011-10-06 00:41:00
回答 3查看 166.8K关注 0票数 111

我正在尝试在LINQ中实现一个查询,该查询在ON子句中使用带有多个条件的左外部联接。

我将使用以下两个表的示例

项目

(ProjectID、ProjectName)和

任务

(TaskID、ProjectID、TaskName、已完成)。我想要查看所有项目及其各自任务的完整列表,但仅查看那些已完成的任务。

我不能使用筛选器

因为这将过滤掉所有未完成任务的项目。相反,我想添加

添加到连接的ON子句,以便显示项目的完整列表,但只显示已完成的任务。没有已完成任务的项目将显示一行,其中Task的值为null。

以下是查询的基础。

代码语言:javascript
复制
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文档。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-06 00:47:24

您只需在两端将匿名属性命名为相同的名称

代码语言:javascript
复制
on new { t1.ProjectID, SecondProperty = true } equals 
   new { t2.ProjectID, SecondProperty = t2.Completed } into j1

基于@svick的评论,下面是另一个可能更有意义的实现:

代码语言:javascript
复制
from t1 in Projects
from t2 in Tasks.Where(x => t1.ProjectID == x.ProjectID && x.Completed == true)
                .DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
票数 155
EN

Stack Overflow用户

发布于 2013-06-04 20:39:55

在这里,你可以使用:

代码语言:javascript
复制
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 }
票数 49
EN

Stack Overflow用户

发布于 2011-10-06 00:51:42

你不能这样做。The The The

子句(和

扩展方法)仅支持等值联接。这也是为什么它使用

而不是

..。即使你能做这样的事情,它也不会起作用,因为

是内联接,而不是外联接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7664727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档