/// <summary> /// 否 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="predicateCurrent">当前表达式</param> /// <returns><see cref="Expression{Func{T, bool}}"/></returns> public static Expression <Func <T, bool> > Not <T>(this Expression <Func <T, bool> > predicateCurrent) where T : class { ExpressionReplace ex = GenExpressionReplace <T>(out var expressionPara); var current = ex.Replace(predicateCurrent); var body = Expression.Not(current); return(Expression.Lambda <Func <T, bool> >(body, expressionPara)); }
/// <summary> /// 合并俩个表达式 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="expressionFirst">第一个表达式</param> /// <param name="expressionSecond">第二个表达式</param> /// <param name="expressionMethod">合并方法</param> /// <returns><see cref="Expression{Func{T, bool}}"/></returns> private static Expression <Func <T, bool> > Combine <T>(Expression <Func <T, bool> > expressionFirst, Expression <Func <T, bool> > expressionSecond, Func <Expression, Expression, Expression> expressionMethod) { ExpressionReplace ex = GenExpressionReplace <T>(out var expressionPara); var left = ex.Replace(expressionFirst.Body); var right = ex.Replace(expressionSecond.Body); return(Expression.Lambda <Func <T, bool> >(expressionMethod(left, right), expressionPara)); }