DataQuery.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DLinq / Dlinq / DataQuery.cs / 1 / DataQuery.cs

                            using System; 
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq.Expressions; 
using System.Linq;
using System.Reflection; 
using System.Diagnostics; 

namespace System.Data.Linq { 
    using System.Data.Linq.Mapping;
    using System.Data.Linq.Provider;

    internal sealed class DataQuery : IOrderedQueryable, IQueryProvider, IEnumerable, IOrderedQueryable, IEnumerable, IListSource { 
        DataContext context;
        Expression queryExpression; 
        private IBindingList cachedList; 

        public DataQuery(DataContext context, Expression expression) { 
            this.context = context;
            this.queryExpression = expression;
        }
 
        Expression IQueryable.Expression {
            get { return this.queryExpression; } 
        } 

        Type IQueryable.ElementType { 
            get { return typeof(T); }
        }

        IQueryable IQueryProvider.CreateQuery(Expression expression) { 
            if (expression == null)
                throw Error.ArgumentNull("expression"); 
            Type eType = System.Data.Linq.SqlClient.TypeSystem.GetElementType(expression.Type); 
            Type qType = typeof(IQueryable<>).MakeGenericType(eType);
            if (!qType.IsAssignableFrom(expression.Type)) 
                throw Error.ExpectedQueryableArgument("expression", qType);
            Type dqType = typeof(DataQuery<>).MakeGenericType(eType);
            return (IQueryable)Activator.CreateInstance(dqType, new object[] { this.context, expression });
        } 

        IQueryable IQueryProvider.CreateQuery(Expression expression) { 
            if (expression == null) 
                throw Error.ArgumentNull("expression");
            if (!typeof(IQueryable).IsAssignableFrom(expression.Type)) 
                throw Error.ExpectedQueryableArgument("expression", typeof(IEnumerable));
            return new DataQuery(this.context, expression);
        }
 
        object IQueryProvider.Execute(Expression expression) {
            return this.context.Provider.Execute(expression).ReturnValue; 
        } 

        S IQueryProvider.Execute(Expression expression) { 
            return (S)this.context.Provider.Execute(expression).ReturnValue;
        }
        IQueryProvider IQueryable.Provider {
            get{ 
                return (IQueryProvider)this;
            } 
        } 

        IEnumerator IEnumerable.GetEnumerator() { 
            return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator() { 
            return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator();
        } 
 
        bool IListSource.ContainsListCollection {
            get { return false; } 
        }

        IList IListSource.GetList() {
            if (cachedList == null) { 
                cachedList = GetNewBindingList();
            } 
            return cachedList; 
        }
 
        internal IBindingList GetNewBindingList() {
            return BindingList.Create(this.context, this);
        }
 
        public override string ToString() {
            return this.context.Provider.GetQueryText(this.queryExpression); 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System; 
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq.Expressions; 
using System.Linq;
using System.Reflection; 
using System.Diagnostics; 

namespace System.Data.Linq { 
    using System.Data.Linq.Mapping;
    using System.Data.Linq.Provider;

    internal sealed class DataQuery : IOrderedQueryable, IQueryProvider, IEnumerable, IOrderedQueryable, IEnumerable, IListSource { 
        DataContext context;
        Expression queryExpression; 
        private IBindingList cachedList; 

        public DataQuery(DataContext context, Expression expression) { 
            this.context = context;
            this.queryExpression = expression;
        }
 
        Expression IQueryable.Expression {
            get { return this.queryExpression; } 
        } 

        Type IQueryable.ElementType { 
            get { return typeof(T); }
        }

        IQueryable IQueryProvider.CreateQuery(Expression expression) { 
            if (expression == null)
                throw Error.ArgumentNull("expression"); 
            Type eType = System.Data.Linq.SqlClient.TypeSystem.GetElementType(expression.Type); 
            Type qType = typeof(IQueryable<>).MakeGenericType(eType);
            if (!qType.IsAssignableFrom(expression.Type)) 
                throw Error.ExpectedQueryableArgument("expression", qType);
            Type dqType = typeof(DataQuery<>).MakeGenericType(eType);
            return (IQueryable)Activator.CreateInstance(dqType, new object[] { this.context, expression });
        } 

        IQueryable IQueryProvider.CreateQuery(Expression expression) { 
            if (expression == null) 
                throw Error.ArgumentNull("expression");
            if (!typeof(IQueryable).IsAssignableFrom(expression.Type)) 
                throw Error.ExpectedQueryableArgument("expression", typeof(IEnumerable));
            return new DataQuery(this.context, expression);
        }
 
        object IQueryProvider.Execute(Expression expression) {
            return this.context.Provider.Execute(expression).ReturnValue; 
        } 

        S IQueryProvider.Execute(Expression expression) { 
            return (S)this.context.Provider.Execute(expression).ReturnValue;
        }
        IQueryProvider IQueryable.Provider {
            get{ 
                return (IQueryProvider)this;
            } 
        } 

        IEnumerator IEnumerable.GetEnumerator() { 
            return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator() { 
            return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator();
        } 
 
        bool IListSource.ContainsListCollection {
            get { return false; } 
        }

        IList IListSource.GetList() {
            if (cachedList == null) { 
                cachedList = GetNewBindingList();
            } 
            return cachedList; 
        }
 
        internal IBindingList GetNewBindingList() {
            return BindingList.Create(this.context, this);
        }
 
        public override string ToString() {
            return this.context.Provider.GetQueryText(this.queryExpression); 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.

                        

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