簡體   English   中英

EF - AND NOT EXISTS (SELECT 1...) with Entity Framework

[英]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;

您可以將ContainsAny一起使用,它的工作方式類似於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM