Не могли бы вы помочь, пожалуйста,
Я хочу построить lamda для фильтрации списка объектов. Я хочу иметь конструктор, который будет принимать список полей и значений и возвращать лямбду, чтобы использовать ее позже для фильтрации списка.
Я сделал следующее:
public class SurveyListFilterBuilder
{
public static Func<SurveysQueryResultItem, bool> Build(string[] searchField, string[] searchFieldValue, LogicalOperation operation)
{
Expression resultExpression = Expression.Constant(true);
for (var i = 0; i < searchField.Length; i++)
{
var field = searchField[i];
var fieldFilterExpression = GetFieldFilterExpression(field, searchFieldValue[i]);
if (operation == LogicalOperation.And)
resultExpression = Expression.And(resultExpression, fieldFilterExpression);
else if (operation == LogicalOperation.Or)
resultExpression = Expression.And(resultExpression, fieldFilterExpression);
}
return Expression.Lambda<Func<SurveysQueryResultItem, bool>>(resultExpression).Compile();
}
private static Expression<Func<MyClass, bool>> GetFieldFilterExpression(string field, string fieldValue)
{
switch (field)
{
case "name":
return x => x.Name.Contains(fieldValue);
case "description":
return x => x.Name.Contains(fieldValue);
default:
throw new NotSupportedException();
}
}
}
Но это не работает, потому что, кажется, я применяю выражение bool оператора ADD и выражение Func:
Бинарный оператор А не определен для типов 'System.Boolean' и 'System.Func`2 [ConsoleApp1.MyClass, System.Boolean]'. '
Вопрос в том, как это исправить и добиться правильного результата?