如何在 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 ...;
我有一个 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 ...;