如何“不是”实体框架的 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 表达式的主要内容,如果未能解决你的问题,请参考以下文章
帮助我使用实体框架从 SQL 转换为 linq 嵌套 lambda 表达式