当前位置: 首页>>代码示例>>C#>>正文


C# Expression.Evaluate方法代码示例

本文整理汇总了C#中System.Linq.Expressions.Expression.Evaluate方法的典型用法代码示例。如果您正苦于以下问题:C# Expression.Evaluate方法的具体用法?C# Expression.Evaluate怎么用?C# Expression.Evaluate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Linq.Expressions.Expression的用法示例。


在下文中一共展示了Expression.Evaluate方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: VisitExpression

        protected override Expression VisitExpression(Expression exp)
        {
            if (exp != null && 
                _canBeSimplified[exp] && 
                !(exp.NodeType == ExpressionType.Lambda) && 
                !(exp.NodeType == ExpressionType.Quote))
            {
                var eval = exp.Evaluate();
                return Expression.Constant(eval, exp.Type);
            }

            return base.VisitExpression(exp);
        }
开发者ID:xeno-by,项目名称:relinq,代码行数:13,代码来源:Funcletizer.cs

示例2: AnalyzeConstant

 protected virtual Expression AnalyzeConstant(Expression expression, BuilderContext builderContext)
 {
     // we try to find a non-constant operand, and if we do, we won't change this expression
     foreach (var operand in expression.GetOperands())
     {
         if (!(operand is ConstantExpression))
             return expression;
     }
     // now, we just simply return a constant with new value
     try
     {
         var optimizedExpression = Expression.Constant(expression.Evaluate());
         // sometimes, optimizing an expression changes its type, and we just can't allow this.
         if (optimizedExpression.Type == expression.Type)
             return optimizedExpression;
     }
         // if we fail to evaluate the expression, then just return it
     catch (ArgumentException) { }
     return expression;
 }
开发者ID:TheRealDuckboy,项目名称:mono-soc-2008,代码行数:20,代码来源:ExpressionOptimizer.cs

示例3: AnalyzeBinaryBoolean

 private Expression AnalyzeBinaryBoolean(Expression expression, BuilderContext builderContext)
 {
     if (expression.Type != typeof(bool))
         return expression;
     var bin = expression as BinaryExpression;
     if (bin == null)
         return expression;
     bool canOptimizeLeft = bin.Left.NodeType == ExpressionType.Constant && bin.Left.Type == typeof(bool);
     bool canOptimizeRight = bin.Right.NodeType == ExpressionType.Constant && bin.Right.Type == typeof(bool);
     if (canOptimizeLeft && canOptimizeRight)
         return Expression.Constant(expression.Evaluate());
     if (canOptimizeLeft || canOptimizeRight)
         switch (expression.NodeType)
         {
             case ExpressionType.AndAlso:
                 if (canOptimizeLeft)
                     if ((bool)bin.Left.Evaluate())
                         return bin.Right;   // (TRUE and X) == X 
                     else
                         return bin.Left;    // (FALSE and X) == FALSE 
                 if (canOptimizeRight)
                     if ((bool)bin.Right.Evaluate())
                         return bin.Left;    // (X and TRUE) == X 
                     else
                         return bin.Right;   // (X and FALSE) == FALSE
                 break;
             case ExpressionType.OrElse:
                 if (canOptimizeLeft)
                     if ((bool)bin.Left.Evaluate())
                         return bin.Left;    // (TRUE or X) == TRUE 
                     else
                         return bin.Right;   // (FALSE or X) == X 
                 if (canOptimizeRight)
                     if ((bool)bin.Right.Evaluate())
                         return bin.Right;   // (X or TRUE) == TRUE 
                     else
                         return bin.Left;    // (X or FALSE) == X
                 break;
             case ExpressionType.Equal:
                 // TODO: this optimization should work for Unary Expression Too
                 // this actually produce errors becouse of string based Sql generation
                 canOptimizeLeft = canOptimizeLeft && bin.Right is BinaryExpression;
                 if (canOptimizeLeft)
                     if ((bool)bin.Left.Evaluate())
                         return bin.Right;                   // (TRUE == X) == X 
                     else
                         return Expression.Not(bin.Right);   // (FALSE == X) == not X 
                 canOptimizeRight = canOptimizeRight && bin.Left is BinaryExpression;
                 // TODO: this optimization should work for Unary Expression Too
                 // this actually produce errors becouse of string based Sql generation
                 if (canOptimizeRight)
                     if ((bool)bin.Right.Evaluate())
                         return bin.Left;                    // (X == TRUE) == X 
                     else
                         return Expression.Not(bin.Left);    // (X == FALSE) == not X
                 break;
             case ExpressionType.NotEqual:
                 canOptimizeLeft = canOptimizeLeft && bin.Right is BinaryExpression;
                 // TODO: this optimization should work for Unary Expression Too
                 // this actually produce errors becouse of string based Sql generation
                 if (canOptimizeLeft)
                     if ((bool)bin.Left.Evaluate())
                         return Expression.Not(bin.Right);   // (TRUE != X) == not X 
                     else
                         return bin.Right;                   // (FALSE != X) == X 
                 canOptimizeRight = canOptimizeRight && bin.Left is BinaryExpression;
                 // TODO: this optimization should work for Unary Expression Too
                 // this actually produce errors becouse of string based Sql generation
                 if (canOptimizeRight)
                     if ((bool)bin.Right.Evaluate())
                         return Expression.Not(bin.Left);    // (X != TRUE) == not X 
                     else
                         return bin.Left;                    // (X != FALSE) == X
                 break;
         }
     return expression;
 }
开发者ID:calumjiao,项目名称:Mono-Class-Libraries,代码行数:77,代码来源:ExpressionOptimizer.cs

示例4: AnalyzeConstant

 protected virtual Expression AnalyzeConstant(Expression expression, BuilderContext builderContext)
 {
     // we try to find a non-constant operand, and if we do, we won't change this expression
     foreach (var operand in expression.GetOperands())
     {
         if (!(operand is ConstantExpression))
             return expression;
     }
     if (expression.NodeType == ExpressionType.Parameter)
         return expression;
     if (expression.NodeType == (ExpressionType)SpecialExpressionType.Like)
         return expression;
     // SETuse
     // If the value of the first SpecialExpressionType change this 999 should change too
     if ((short)expression.NodeType > 999)
         return expression;
     // now, we just simply return a constant with new value
     try
     {
         var optimizedExpression = Expression.Constant(expression.Evaluate());
         // sometimes, optimizing an expression changes its type, and we just can't allow this.
         if (optimizedExpression.Type == expression.Type)
             return optimizedExpression;
     }
         // if we fail to evaluate the expression, then just return it
     catch (ArgumentException) 
     {
         return expression;
     }
     return expression;
 }
开发者ID:calumjiao,项目名称:Mono-Class-Libraries,代码行数:31,代码来源:ExpressionOptimizer.cs


注:本文中的System.Linq.Expressions.Expression.Evaluate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。