你如何在 Linq 中写一个带有“OR”的 INNER JOIN

Posted

技术标签:

【中文标题】你如何在 Linq 中写一个带有“OR”的 INNER JOIN【英文标题】:How do you write an INNER JOIN with an "OR" in Linq 【发布时间】:2021-09-16 23:57:36 【问题描述】:

我正在尝试编写一个 Linq 查询来生成以下 SQL

SELECT 
    [t1].[Id], [t2].[value3]
FROM 
    [Table1] AS [t1]
INNER JOIN 
    [Table2] AS [t2] ON [t1].[Id] = [t2].[value1]
                     OR [t1].[Id] = [t2].[value2]

我已经看过很多关于如何进行多重连接的示例,但没有看到如何进行这种“一个或另一个”连接的示例。

【问题讨论】:

也许我的SQL to LINQ Recipe 可以帮助你。 【参考方案1】:
var result = from t1 in context.Table1
             from t2 in context.Table2
             where (t1.Id == t2.value1 || t1.Id == t2.value2)
             select new 
                     
                        t1.Id,
                        t2.value3
                    ;

【讨论】:

【参考方案2】:

内连接

var query = 
    from t1 in context.Table1
    from t2 in context.Table2.Where(t2 => t1.Id == t2.value1 || t1.Id == t2.value2)
    select new 
     
        t1.Id,
        t2.value3
    ;

左连接


var query = 
    from t1 in context.Table1
    from t2 in context.Table2.Where(t2 => t1.Id == t2.value1 || t1.Id == t2.value2)
       .DefaultIfEmpty()
    select new 
     
        t1.Id,
        t2.value3
    ;

【讨论】:

以上是关于你如何在 Linq 中写一个带有“OR”的 INNER JOIN的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在一个中写两个“in”语句?

如何在 linq 查询 c# 中的 WHERE 语句后嵌入动态 OR 条件

我如何在 Angular 中写博客组件?

Linq to Entities 中的动态 where 子句 (OR)

如何在带有 Select 语句的存储过程上使用 LINQ?

如何在 Mono 中使用 LINQ?