2016-05-18 58 views
-1

我試圖建立與C#和EF6查詢應該是這個樣子:LINQ哪裏...而不是

SELECT * FROM MyTable 
WHERE (State = 'Active') 
AND NOT (ItemId = 3 AND Field = 'some text') 
AND NOT (ItemId = 7 AND Field = 'some other text') 

第一個條件常是國家=「活躍」和下列條件可能會出現好幾次。 如果我以下面的方式嘗試它,我不會從上面獲得使用SQL查詢獲得的記錄。

var records = db.MyTable.Where(x => x.State == "Active"); 

foreach (var ignoreItem in ignoreList) 
{ 
    records = records.Where(x => x.ItemId != ignoreItem.ItemId && x.Field != ignoreItem.FieldText); 
} 
+0

'&&'應該是'||',但是你爲什麼不使用和SQL一樣的語句?'(...)' –

+0

我不知道我可以使用Where(x =>! (.....));謝謝 – Skuami

回答

3

那是因爲你在布爾代數的錯誤:

NOT (ItemId = 3 AND Field = 'some text') 

需求轉化爲

Where(x => !(x.ItemId == ignoreItem.ItemId && x.Field == ignoreItem.FieldText)) 

Where(x => x.ItemId != ignoreItem.ItemId || x.Field != ignoreItem.FieldText) 
+0

謝謝,我知道我的表達方式是錯的。我不知道我是如何做對的。 – Skuami