BindingContext.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / ELinq / BindingContext.cs / 1305376 / BindingContext.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....]
//--------------------------------------------------------------------- 
 
using CqtExpression = System.Data.Common.CommandTrees.DbExpression;
using LinqExpression = System.Linq.Expressions.Expression; 
using System.Linq.Expressions;
using System.Collections.ObjectModel;
using System.Linq;
using System.Collections.Generic; 
using System.Data.Common.CommandTrees;
using System.Data.Metadata.Edm; 
using System.Reflection; 
using System.Data.Common.EntitySql;
using System.Diagnostics; 
using System.Data.Common;
using System.Globalization;
namespace System.Data.Objects.ELinq
{ 
    /// 
    /// Class containing binding information for an expression converter (associating CQT bindings 
    /// with LINQ lambda parameter or LINQ sub-expressions) 
    /// 
    ///  
    /// Usage pattern:
    /// 
    /// BindingContext context = ...;
    /// 
    /// // translate a "Where" lamba expression input.Where(i => i.X > 2);
    /// LambdaExpression whereLambda = ...; 
    /// CqtExpression inputCqt = Translate(whereLambda.Arguments[1]); 
    /// CqtExpression inputBinding = CreateExpressionBinding(inputCqt).Var;
    /// 
    /// // push the scope defined by the parameter
    /// context.PushBindingScope(new KeyValuePair{ParameterExpression, CqtExpression}(whereLambda.Parameters[0], inputBinding));
    ///
    /// // translate the expression in this context 
    /// CqtExpression result = Translate(whereLambda.Expression);
    /// 
    /// // pop the scope 
    /// context.PopBindingScope();
    ///  
    /// 
    internal sealed class BindingContext
    {
        private readonly Stack _scopes; 

        ///  
        /// Initialize a new binding context 
        /// 
        internal BindingContext() 
        {
            _scopes = new Stack();
        }
 
        /// 
        /// Set up a new binding scope where parameter expressions map to their paired CQT expressions. 
        ///  
        /// DbExpression/LinqExpression binding
        internal void PushBindingScope(Binding binding) 
        {
            _scopes.Push(binding);
        }
 
        /// 
        /// Removes a scope when leaving a particular sub-expression. 
        ///  
        /// Scope.
        internal void PopBindingScope() 
        {
            _scopes.Pop();
        }
 
        internal bool TryGetBoundExpression(Expression linqExpression, out CqtExpression cqtExpression)
        { 
            cqtExpression = _scopes 
                .Where(binding => binding.LinqExpression == linqExpression)
                .Select(binding => binding.CqtExpression) 
                .FirstOrDefault();
            return cqtExpression != null;
        }
    } 

    ///  
    /// Class describing a LINQ parameter and its bound expression. For instance, in 
    ///
    /// products.Select(p => p.ID) 
    ///
    /// the 'products' query is the bound expression, and 'p' is the parameter.
    /// 
    internal sealed class Binding 
    {
        internal Binding(Expression linqExpression, CqtExpression cqtExpression) 
        { 
            EntityUtil.CheckArgumentNull(linqExpression, "linqExpression");
            EntityUtil.CheckArgumentNull(cqtExpression, "cqtExpression"); 
            LinqExpression = linqExpression;
            CqtExpression = cqtExpression;
        }
 
        internal readonly Expression LinqExpression;
        internal readonly CqtExpression CqtExpression; 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....]
//--------------------------------------------------------------------- 
 
using CqtExpression = System.Data.Common.CommandTrees.DbExpression;
using LinqExpression = System.Linq.Expressions.Expression; 
using System.Linq.Expressions;
using System.Collections.ObjectModel;
using System.Linq;
using System.Collections.Generic; 
using System.Data.Common.CommandTrees;
using System.Data.Metadata.Edm; 
using System.Reflection; 
using System.Data.Common.EntitySql;
using System.Diagnostics; 
using System.Data.Common;
using System.Globalization;
namespace System.Data.Objects.ELinq
{ 
    /// 
    /// Class containing binding information for an expression converter (associating CQT bindings 
    /// with LINQ lambda parameter or LINQ sub-expressions) 
    /// 
    ///  
    /// Usage pattern:
    /// 
    /// BindingContext context = ...;
    /// 
    /// // translate a "Where" lamba expression input.Where(i => i.X > 2);
    /// LambdaExpression whereLambda = ...; 
    /// CqtExpression inputCqt = Translate(whereLambda.Arguments[1]); 
    /// CqtExpression inputBinding = CreateExpressionBinding(inputCqt).Var;
    /// 
    /// // push the scope defined by the parameter
    /// context.PushBindingScope(new KeyValuePair{ParameterExpression, CqtExpression}(whereLambda.Parameters[0], inputBinding));
    ///
    /// // translate the expression in this context 
    /// CqtExpression result = Translate(whereLambda.Expression);
    /// 
    /// // pop the scope 
    /// context.PopBindingScope();
    ///  
    /// 
    internal sealed class BindingContext
    {
        private readonly Stack _scopes; 

        ///  
        /// Initialize a new binding context 
        /// 
        internal BindingContext() 
        {
            _scopes = new Stack();
        }
 
        /// 
        /// Set up a new binding scope where parameter expressions map to their paired CQT expressions. 
        ///  
        /// DbExpression/LinqExpression binding
        internal void PushBindingScope(Binding binding) 
        {
            _scopes.Push(binding);
        }
 
        /// 
        /// Removes a scope when leaving a particular sub-expression. 
        ///  
        /// Scope.
        internal void PopBindingScope() 
        {
            _scopes.Pop();
        }
 
        internal bool TryGetBoundExpression(Expression linqExpression, out CqtExpression cqtExpression)
        { 
            cqtExpression = _scopes 
                .Where(binding => binding.LinqExpression == linqExpression)
                .Select(binding => binding.CqtExpression) 
                .FirstOrDefault();
            return cqtExpression != null;
        }
    } 

    ///  
    /// Class describing a LINQ parameter and its bound expression. For instance, in 
    ///
    /// products.Select(p => p.ID) 
    ///
    /// the 'products' query is the bound expression, and 'p' is the parameter.
    /// 
    internal sealed class Binding 
    {
        internal Binding(Expression linqExpression, CqtExpression cqtExpression) 
        { 
            EntityUtil.CheckArgumentNull(linqExpression, "linqExpression");
            EntityUtil.CheckArgumentNull(cqtExpression, "cqtExpression"); 
            LinqExpression = linqExpression;
            CqtExpression = cqtExpression;
        }
 
        internal readonly Expression LinqExpression;
        internal readonly CqtExpression CqtExpression; 
    } 
}

// 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