如何在LINQ to SQL中编写“不相等”的连接?

时间:2015-04-07 12:19:15

标签: c# join linq-to-sql equals

我有一个表employees,其中包含以下列

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

我想在LINQ to SQL中编写以下select:

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,但语法不受支持。

任何想法如何实现我的目标?

:编辑

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

2 个答案:

答案 0 :(得分:1)

只需将您的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到对象)

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

答案 1 :(得分:0)

我自己找到了一个解决方案,看起来非常丑陋,但确实有效:

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