2011-04-01 7 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

두 컨테이너의 교집합을 제외하고 두 컨테이너가 모두 같은 유형을 포함하는 경우에는 올바른 작업이지만, 일반적으로! contains를 사용해야합니다. – briantyler

+1

예, 가장 일반적인 경우입니다. Except()는 더 읽기 쉬운 솔루션을 제공하지만 Contains()보다 유연성이 떨어지는 경우가 있습니다. –