“不包含”动态lambda表达式

时间:2014-07-28 10:16:53

标签: c# linq

以下代码"包含"表达式:

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;动态表达?

2 个答案:

答案 0 :(得分:9)

“不包含”表达式与“包含”表达式完全相同 - 但用unary negation expression包装。所以基本上你想要:

// Code as before
var doesNotContain = Expression.Not(contains);
return Expression.Lambda<Func<T, bool>>(doesNotContain, obj);

答案 1 :(得分:3)

Contains会向您返回boolInverting a bool已使用Expression.Not方法完成。