【发布时间】:2018-11-18 11:57:38
【问题描述】:
你能帮忙吗,
我想构建 lamda 来过滤对象列表。我想要一个接受字段和值列表并返回 lambda 以供稍后用于过滤列表的构建器。
我做了以下事情:
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();
}
}
}
但它不起作用,因为我似乎应用了 ADD 运算符 bool 表达式和 Func 表达式:
二元运算符 And 没有为类型 'System.Boolean' 和 'System.Func`2[ConsoleApp1.MyClass,System.Boolean]' 定义。'
问题是如何修复它并获得正确的结果?
【问题讨论】:
标签: c# expression