2015-11-05 29 views
1

我想在我的ASP.NET MVC項目中使用實體框架運行此查詢,但我沒有成功。任何人都可以幫我使用LINQ來做這件事嗎?EF - 並不存在(選擇1 ...)與實體框架

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 

回答

6

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; 
您使用<>不等於調節其LINQ不支持
+0

非常感謝你伊萬它工作! – GustavoZafra

3

您可以使用ContainsAny將在SQL工作像NOT EXISTS。就像這樣:

var restuls = db.Produtos.Where(p => p.enterpriseID == '00000000000191' 
       && p.productId != 14 
       && !db.SimilarProducts.Any(sp =>sp.SimilarId == p.productId)); 
+0

,邏輯是正確的,但這個linq的上下文在我的代碼中是錯誤的!包含只在pameter中接收單個字符串。 –

+0

你好非常感謝你的回答 – GustavoZafra

+0

@vtncgustavo - 你的情況是什麼情況? –