【问题标题】:"Does Not Contain" dynamic lambda expression“不包含”动态 lambda 表达式
【发布时间】:2014-09-19 12:16:33
【问题描述】:

下面的代码做了“包含”的表达:

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;
}

我对表达式不是很熟悉,我不知道如何将否定放入表达式函数中,并且在“表达式”类中找不到任何合适的方法。有没有类似的方法来动态创建“不包含”表达式?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      Contains 会返回一个boolInverting a bool 使用 Expression.Not 方法完成。

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多