使用实体框架的EF - AND NOT EXISTS(SELECT 1 ...)

Gus*_*fra 8 c# sql linq asp.net-mvc entity-framework

我试图在我的ASP.NET MVC项目中使用Entity Framework运行此查询,但我没有成功.任何人都可以帮我用LINQ做这个吗?

SELECT p.*
FROM Produtos p
WHERE p.enterpriseID = '00000000000191' and p.productId <> '14' 
AND NOT EXISTS (SELECT 1 FROM SimilarProducts sp WHERE sp.similarId = 
p.productId)
Run Code Online (Sandbox Code Playgroud)

表:

PRODUCT                        SIMILARPRODUCTS
productId|enterpriseId         id|productId|similarId
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 15

SQL的直接等效LINQ结构NOT EXISTS (...)!Any(...).

所以

SELECT p.*
FROM Produtos p
WHERE p.enterpriseID = '00000000000191' and p.productId <> '14' 
AND NOT EXISTS (SELECT 1 FROM SimilarProducts sp WHERE sp.similarId = 
p.productId)
Run Code Online (Sandbox Code Playgroud)

翻译成

from p in db.Produtos
where p.enterpriseID = "00000000000191" && p.productId != 14 
&& !db.SimilarProducts.Any(sp => sp.similarId == p.productId)
select p;
Run Code Online (Sandbox Code Playgroud)


Mah*_*mal 6

您可以使用Containswith Anywhich 将像NOT EXISTS在 SQL 中一样工作。像这样:

var restuls = db.Produtos.Where(p => p.enterpriseID == '00000000000191' 
                 && p.productId != 14 
                 && !db.SimilarProducts.Any(sp =>sp.SimilarId == p.productId));
Run Code Online (Sandbox Code Playgroud)