2011-08-03 3 views
0

"type1"이 아닌 유형을 필터링하는 코드 아래에이 코드가 있습니다.where 절에 동적 쿼리를 사용하여 C#

이제 데이터 필터링을 위해 더 많은 절을 가질 수있는 where 쿼리를 동적으로 만들어야합니다.

그래서 위의 코드의 수정 된 버전은

List = Details.Where(p => p.Type != Constants.Type1 && p.Type != Constants.Type2).ToList(); 

내가 C#에서이를 달성 할 수있는 방법 조언을 주시기 바랍니다있다

+0

asp.net의 관련성이 확실하지 않습니까? – gideon

답변

3
var ExcludedTypes = new Type[] { Constants.Type1, Constants.Type2 }; 
List = Details.Where(p => !ExcludedTypes.Contains(p.Type)).ToList(); 
2

당신은 그냥이 영향을 미치지 않습니다 것을 기억 (Where 여러 번 호출 할 수 있습니다 호출 한 쿼리, 반환 값). 예를 들면 :

var query = Details.Where(p => p.Type != Constants.Type1); 
if (avoidType2) 
{ 
    query = query.Where(p => p.Type != Constants.Type2); 
} 
List = query.ToList(); 

편집 : 범용 동적 필터링을 위해이 방법을 사용하는 거라고합니다. 항상 유형별로만 필터를 적용하려는 경우 유효한 유형의 목록 일뿐입니다. 그런 다음 George의 방식을 사용합니다.

+0

하지만 코드에서 type1을 확인하기 위해 1을 반복하고 type2를 위해 두 번 반복하지는 않습니다. 한 번에 할 수 없습니까? – Amit

+0

@Amit : 아니요, 그렇지 않습니다. * exact * 동작은 제공 업체 (예 : LINQ to SQL 대 LINQ to Objects)에 따라 다르지만 * 논리적 * 결과는 각 필터가 쿼리에서 반환 된 각 항목에 차례로 적용된다는 것입니다. 'Where' 호출은 LINQ의 게으른 본질 때문에 반복 자체를 수행하지 않습니다. –

+0

그래서 "List = query.ToList();"를 할 때 귀하의 코드에서 우리가 "where"메서드를 호출 한 곳 대신 실제 필터링이 수행됩니다. – Amit

관련 문제