我有一个表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
,但语法不受支持。
任何想法如何实现我的目标?
:编辑
我找到了一个解决方案,请参阅我发布的答案。
答案 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;