[英]EF - AND NOT EXISTS (SELECT 1 ...) with 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)
表格:
PRODUCT SIMILARPRODUCTS
productId|enterpriseId id|productId|similarId
SQL NOT EXISTS (...)
的直接等效 LINQ 构造是!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)
翻译成
from p in db.Produtos
where p.enterpriseID = "00000000000191" && p.productId != 14
&& !db.SimilarProducts.Any(sp => sp.similarId == p.productId)
select p;
您可以将Contains
与Any
一起使用,它的工作方式类似于 SQL 中的NOT EXISTS
。 像这样:
var restuls = db.Produtos.Where(p => p.enterpriseID == '00000000000191'
&& p.productId != 14
&& !db.SimilarProducts.Any(sp =>sp.SimilarId == p.productId));
EF Contains => sql in() :迭代所有项目(较慢)
EF Any => sql exists() :迭代直到条件返回真(更快)
await appDbContext.MasterTable
.Where(m => !m.DetailTable.Any(d => d.MasterId == m.Id))
.ToListAsync();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.