【发布时间】:2018-04-01 06:31:09
【问题描述】:
public static Expression<Func<T, bool>> SearchExpression<T>(string[] propertyNames, string[] propertyValue){
var parameterExp = Expression.Parameter(typeof(T), "type");
MethodInfo toLowerMethod = typeof(string).GetMethod("ToLower", Type.EmptyTypes);
MethodInfo containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
List<Expression> methodCalls = new List<Expression>();
Expression finalExpression = Expression.Constant(true);
foreach (string propertyName in propertyNames)
{
var propertyExp = Expression.Property(parameterExp, propertyName);
var queryValue = Expression.Constant(propertyValue[Array.IndexOf(propertyNames, propertyName)].ToLower(), typeof(string));
var exp = Expression.NotEqual(propertyExp, Expression.Constant(null, typeof(object)));
methodCalls.Add(exp);
var toLowerMethodExp = Expression.Call(propertyExp, toLowerMethod);
var containsMethodExp = Expression.Call(toLowerMethodExp, "Contains", Type.EmptyTypes, queryValue);
methodCalls.Add(containsMethodExp);
}
var orExp = methodCalls.Aggregate((left, right) => Expression.And(left, right));
return Expression.Lambda<Func<T, bool>>(orExp, parameterExp);
}
当我尝试调试它时,它显示了完美的表达式,但是当 db 列中有 null 值时它会给出错误。
【问题讨论】:
-
@marc_s 这不像其他问题那样简单的
NullReferenceException,而且那里的答案都没有真正的帮助。这是与And与AndAlso相关的 LINQ 表达式特定问题。
标签: entity-framework linq expression