2017-11-06 5 views
1

이 코드를 사용하여 검색 필터를 만들었습니다.AND 필터를 생성하는 람다 식

데이터 배열을 전달하고이 데이터를 AND로 필터링해야합니다.

Expression<Func<serveis, bool>> CombineWithAnd<T>(Expression<Func<T, bool>> firstExpression, Expression<Func<T, bool>> secondExpression) 
{    
    var parameter = Expression.Parameter(typeof(T), "z");    
    var resultBody = Expression.AndAlso(Expression.Invoke(firstExpression, parameter), Expression.Invoke(secondExpression, parameter)); 

    return Expression.Lambda<Func<serveis, bool>>(resultBody, parameter);  
} 

: 그리고

Expression<Func<T, bool>> resultExpression = n => false;  

foreach (var car in cars) 
{  
    Expression<Func<T, bool>> expression = x => x.color_car.Any(z => z.car == car); 
    resultExpression = CombineWithAnd(resultExpression, expression); 
} 

query = query.Where(resultExpression.Compile()); 

내가 검색이 제대로 작동하거나 또는 OrElse라는를 사용하여이 동일한 코드를 사용하는 경우

.

그러나 또한 AND 또는 AndAlso로 검색을 수행해야하며 항상 0 개의 결과를 반환합니다.

그리고 데이터베이스를 체크인했는데 AND 및 OR 결과가 있습니다.

답변

4
를 들어

AND, 당신은 시작 "왼쪽"교체해야합니다 : 현재 왼쪽에 관계없이 오른쪽의

+0

그건 당신의 상태를 실패하기 때문에

Expression<Func<T, bool>> resultExpression = n => true; 

:

Expression<Func<T, bool>> resultExpression = n => false; 

과를 올바른, 도와 줘서 고마워. – Geo