LinqTreeNodeEvaluator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Objects / ELinq / Visitors / LinqTreeNodeEvaluator.cs / 1 / LinqTreeNodeEvaluator.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....], [....]
//--------------------------------------------------------------------- 
using System.Linq.Expressions; 
using System.Collections.Generic;
namespace System.Data.Objects.ELinq 
{

    /// 
    /// Goes from the bottom to top and nominates nodes where all the nodes 
    /// below the node return true from the shouldBeNominatedDelegate
    ///  
    internal sealed class LinqTreeNodeEvaluator : ExpressionVisitor 
    {
        HashSet _nodesToEvaluate; 
        private LinqTreeNodeEvaluator(HashSet nodesToEvaluate)
        {
            _nodesToEvaluate = nodesToEvaluate;
        } 

        internal static Expression EvaluateClosuresAndClientEvalNodes(Expression expression) 
        { 
            return Evaluate(expression,
                            LinqMaximalSubtreeNominator.Nominate( 
                                expression,
                                new HashSet(),
                                e => ExpressionEvaluator.IsExpressionNodeAClosure(e) || ExpressionEvaluator.IsExpressionNodeClientEvaluatable(e)
                            ) 
                        );
        } 
 
        internal static Expression Evaluate(Expression expression, HashSet nodesToEvaluate)
        { 
            if (nodesToEvaluate.Count == 0)
            {
                // I can save you some time on this one...
                return expression; 
            }
 
            LinqTreeNodeEvaluator nominator = new LinqTreeNodeEvaluator(nodesToEvaluate); 
            return nominator.Visit(expression);
        } 

        internal override Expression Visit(Expression exp)
        {
            if (exp != null && 
                exp.NodeType != ExpressionType.Constant &&
                _nodesToEvaluate.Contains(exp)) 
            { 
                return Expression.Constant(ExpressionEvaluator.EvaluateExpression(exp), exp.Type);
            } 
            return base.Visit(exp);
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....], [....]
//--------------------------------------------------------------------- 
using System.Linq.Expressions; 
using System.Collections.Generic;
namespace System.Data.Objects.ELinq 
{

    /// 
    /// Goes from the bottom to top and nominates nodes where all the nodes 
    /// below the node return true from the shouldBeNominatedDelegate
    ///  
    internal sealed class LinqTreeNodeEvaluator : ExpressionVisitor 
    {
        HashSet _nodesToEvaluate; 
        private LinqTreeNodeEvaluator(HashSet nodesToEvaluate)
        {
            _nodesToEvaluate = nodesToEvaluate;
        } 

        internal static Expression EvaluateClosuresAndClientEvalNodes(Expression expression) 
        { 
            return Evaluate(expression,
                            LinqMaximalSubtreeNominator.Nominate( 
                                expression,
                                new HashSet(),
                                e => ExpressionEvaluator.IsExpressionNodeAClosure(e) || ExpressionEvaluator.IsExpressionNodeClientEvaluatable(e)
                            ) 
                        );
        } 
 
        internal static Expression Evaluate(Expression expression, HashSet nodesToEvaluate)
        { 
            if (nodesToEvaluate.Count == 0)
            {
                // I can save you some time on this one...
                return expression; 
            }
 
            LinqTreeNodeEvaluator nominator = new LinqTreeNodeEvaluator(nodesToEvaluate); 
            return nominator.Visit(expression);
        } 

        internal override Expression Visit(Expression exp)
        {
            if (exp != null && 
                exp.NodeType != ExpressionType.Constant &&
                _nodesToEvaluate.Contains(exp)) 
            { 
                return Expression.Constant(ExpressionEvaluator.EvaluateExpression(exp), exp.Type);
            } 
            return base.Visit(exp);
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK