代码之家  ›  专栏  ›  技术社区  ›  Richard Friend

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

  •  9
  • Richard Friend  · 技术社区  · 14 年前

    鉴于以下情况

    Expression<Func<T,bool>> matchExpression;
    

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

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

    但实体框架不支持这一点。。。

    当做

    1 回复  |  直到 14 年前
        1
  •  10
  •   Jb Evain    14 年前

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

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