以下代码"包含"表达式:
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;
}
我对表达式不是很熟悉,而且我不知道如何将否定置于表达式函数中,并且无法在&#34;表达式中找到任何合适的方法。类。是否有任何类似的方式来创建&#34;不包含&#34;动态表达?
答案 0 :(得分:9)
“不包含”表达式与“包含”表达式完全相同 - 但用unary negation expression包装。所以基本上你想要:
// Code as before
var doesNotContain = Expression.Not(contains);
return Expression.Lambda<Func<T, bool>>(doesNotContain, obj);
答案 1 :(得分:3)
Contains
会向您返回bool
。 Inverting a bool
已使用Expression.Not
方法完成。