如何“不是”实体框架的 lambda 表达式

Posted

技术标签:

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

鉴于以下

Expression<Func<T,bool>> matchExpression;

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

我试过了

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

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

问候

【问题讨论】:

【参考方案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 :)

以上是关于如何“不是”实体框架的 lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章