2017-11-06 1 views
1

Ich habe diesen Code verwendet, um einen Suchfilter zu erstellen.Lambda-Ausdruck zum Erstellen von UND-Filter

Ich brauche ist ein Array von Daten übergeben und filtern Sie diese Daten durch UND.

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);  
} 

Und dann:

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()); 

Wenn ich diesen gleichen Code mit OR oder OrElse die Suche richtig funktioniert.

Aber ich muss auch die Suche von AND oder AndAlso durchführen und es gibt immer Null Ergebnisse zurück.

Und ich habe in der Datenbank eingecheckt und es gibt sowohl AND und OR Ergebnisse.

Antwort

4

Für AND, sollen Sie den Start "linke Seite" ersetzen:

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

mit:

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

weil derzeit die linke Seite Ihren Zustand nicht unabhängig von der rechten Seite

+0

es ist richtig, danke für die Hilfe. – Geo

Verwandte Themen