下面的代码执行“包含”表达式:
private static Expression<Func<T,bool>> Contains<T>(string property,string value) { var obj = Expression.Parameter(typeof(T),"obj"); var objProperty = Expression.PropertyOrField(obj,property); var contains = Expression.Call(objProperty,"Contains",null,Expression.Constant(value,typeof(string))); var lambda = Expression.Lambda<Func<T,bool>>(contains,obj); return lambda; }
我对表达式不是很熟悉,我不知道如何将否定放入表达式函数中,并且在“Expression”类中找不到任何合适的方法.有没有类似的方法动态创建“不包含”表达式?
解决方法
“不包含”表达式与“包含”表达式完全相同 – 但用
unary negation expression包装.所以基本上你想要:
// Code as before var doesNotContain = Expression.Not(contains); return Expression.Lambda<Func<T,bool>>(doesNotContain,obj);