我有以下代码:
case FilterQueryType.Contains:
var parameterExp = Expression.Parameter(type, "type");
var propertyExp = Expression.Property(parameterExp, filter.PropertyName);
var containsConstExp = Expression.Constant(filter.MyKeyword);
MethodInfo method = typeof(string).GetMethod("Contains", new []{typeof(string)});
var containsMethodExp = Expression.Call(propertyExp, method, containsConstExp);
var containsLambda = Expression.Lambda<Func<T, bool>>(containsMethodExp, parameterExp);
items = items.Where(containsLambda);
break;
只要 filter.PropertyName 是一个字符串,这段代码就可以正常工作。 现在我有一个例子,其中 filter.PropertyName 实际上是一个可枚举的字符串。
有人能告诉我如何为此创建正确的表达式吗? (filter.MyKeyword 本身将始终是单个值)
最佳答案
MemberExpression memberExpression = Expression.Property(parameterExp, filter.PropertyName);
Expression convertExpression = Expression.Convert(memberExpression, typeof(List<string>));
MethodCallExpression containsExpression = Expression.Call(convertExpression, "Contains", new Type[] { }, constExpr);
lambda = Expression.Lambda<Func<T, bool>>(containsExpression, parameterExp);
items = items.Where(lambda);
这个解决方案适合我
关于c# - 根据作为字符串列表的属性过滤数据的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443092/