2011-04-01 85 views
4

我正在創建一個LINQ查詢,我想要一個SQL樣式的NOT IN子句來確保我的結果沒有逗號分隔列表中的某個值。LINQ的NOT IN子句?

我找不到LINQ的NOT IN子句。請提出解決方案。

回答

1

事情是這樣的......

string items = "1,2,3,4"; 
var subList = items.Split(','); 
var result = list.Where(item=>!subList.Contains(item.SomeStringField)); 
3

你需要做一個!包含要排除的對象的集合。

var excluded = new[] { 3, 7, 19, 41 }; 
var v = from i in Enumerable.Range(0, 100) 
     where !excluded.Contains(i) 
     select i; 
2

您將需要.Except()集合運算符。

var results = list1.Except(list2); 

http://blogs.msdn.com/b/charlie/archive/2008/07/12/the-linq-set-operators.aspx http://www.hookedonlinq.com/ExceptOperator.ashx

注意:您要實現一個iEqualityComparor使用除方法與複雜類型。

+0

除了創建兩個容器的交集之外,如果兩個容器都包含相同的類型,但是對於需要使用!的常規情況,這是正確的做法。 – briantyler 2011-04-01 15:14:32

+1

是的,是最常見的情況。除了()提供了一個更可讀的解決方案,但在某些情況下比Contains()更不靈活。 – 2011-04-01 15:48:32