如何在 LINQ to SQL 中使用 "not equal" 编写连接?

How to write a join with "not equal" in LINQ to SQL?

我有一个 table employees 包含以下列

ID, Name, ..., RelatedID, ...

我想在 LINQ 中将以下 select 写入 SQL:

select distinct b.ID, b.Name
from employees b
join employees a on a.RelatedID > 0
where b.id = a.RelatedID

我认为表达式 a.RelatedID > 0 基本上是 0 not equals a.RelatedID 但语法不受支持。

关于如何实现我的目标有什么想法吗?

:编辑

我找到了解决方案,请参阅我发布的答案。

我自己找到了一个解决方案,看起来很丑但是有效:

from b in employees  
where (from a in employees where a.RelatedID > 0 select a.RelatedID).Contains(b.ID)
select b;

只需将您的 where 与您的加入过滤器交换即可。您已将实际的连接过滤器放在 Where 中,并将过滤作为连接条件,因此出现了问题。

var query = from b in employees
    join a in employees on b.id equals a.RelatedID
    where b.RelatedID > 0
    select ...;

请注意,您可能还想在加入之前进行过滤(不确定这在 SQL 中是否重要;它肯定会对 LINQ to objects 有所帮助)

var query = from b in employees
    where b.RelatedID > 0
    join a in employees on b.id equals a.RelatedID
    select ...;