【问题标题】:how to 'not' a lambda expression for entity framework如何“不是”实体框架的 lambda 表达式
【发布时间】:2011-04-16 17:33:51
【问题描述】:

鉴于以下

Expression<Func<T,bool>> matchExpression;

如何创建另一个与现有表达式“不”的表达式。

我试过了

Expression<Func<T, bool>> func3 = (i) => !matchExpression.Invoke(i);

但是实体框架不支持这个...

问候

【问题讨论】:

    标签: c# .net entity-framework lambda


    【解决方案1】:

    你必须重新创建一个新的 lambda,并否定原来的主体:

    Expression<Func<T, bool>> not = Expression.Lambda<Func<T, bool>> (
        Expression.Not (matchExpression.Body),
        matchExpression.Parameters [0]);
    

    【讨论】:

    • (你可以传入 matchExpression.Parameters - 它会是一样的)
    • @Marc:当然。但在这种特定情况下,我喜欢它表达了用一个参数否定谓词的意图。
    • 另外,在这个问题之后,我最终在 Mono.Linq.Expressions 的 PredicateBuilder 中添加了一种否定谓词的方法:github.com/jbevain/mono.linq.expressions 所以感谢 Richard :)
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多