2016-05-18 42 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