使用Linq to Entities并带有NOT IN子句
本文关键字:NOT IN 子句 Linq to Entities 使用 | 更新日期: 2023-09-27 18:05:49
我有一个SQL查询,我试图转换为LINQ:
SELECT * FROM TABLE1
WHERE LICENSE_RTK NOT IN(
SELECT KEY_VALUE FROM TABLE2
WHERE REFERENCE_RTK = 'FOO')
所以我为内部查询写了一个查询,然后为外部查询写了一个查询,并使用Except
:
var insideQuery = (from pkcr in this.Repository.Context.TABLE2 where pkcr.Reference_RTK == "FOO" select pkcr.Key_Value);
var outerQuery = (from pl in this.Repository.Context.TABLE1 select pl).Except(insideQuery);
但这是错误的。甚至不能编译它。正确的写法是什么?
不能编译第二个查询,因为应该对相同类型的Queryables使用Except
。但是你试着把它应用在Queryable<TABLE1>
和Queryable<TypeOfTABLE2Key_Value>
上。我还认为你应该在这里使用Contains
:
var keys = from pkcr in this.Repository.Context.TABLE2
where pkcr.Reference_RTK == "FOO"
select pkcr.Key_Value;
var query = from pl in this.Repository.Context.TABLE1
where !keys.Contains(pl.License_RTK)
select pl;
注意:生成的查询将是NOT EXISTS
而不是NOT IN
,但这是你想要的
SELECT * FROM FROM [dbo].[TABLE1] AS [Extent1]
WHERE NOT EXISTS
(SELECT 1 AS [C1]
FROM [dbo].[TABLE2] AS [Extent2]
WHERE ([Extent2].[Reference_RTK] == @p0) AND
([Extent2].[Key_Value] = [Extent1].[License_RTK]))