OfTypeExpression.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 / xsp / System / Extensions / UI / WebControls / Expressions / OfTypeExpression.cs / 1305376 / OfTypeExpression.cs

                            #if ORYX_VNEXT 
namespace Microsoft.Web.Data.UI.WebControls.Expressions {
#else
namespace System.Web.UI.WebControls.Expressions {
#endif 
    using System.ComponentModel;
    using System.Diagnostics; 
    using System.Globalization; 
    using System.Linq;
    using System.Linq.Expressions; 
    using System.Reflection;
    using System.Web.Compilation;
    using System.Web.Resources;
    using System; 
    using System.Web.UI;
 
    public class OfTypeExpression : DataSourceExpression { 
        private MethodInfo _ofTypeMethod;
        private string _typeName; 

        private MethodInfo OfTypeMethod {
            get {
                if (_ofTypeMethod == null) { 
                    var type = GetType(TypeName);
 
                    _ofTypeMethod = GetOfTypeMethod(type); 
                }
                return _ofTypeMethod; 
            }
        }

        [DefaultValue("")] 
        public string TypeName {
            get { 
                return _typeName ?? String.Empty; 
            }
            set { 
                if (TypeName != value) {
                    _typeName = value;
                    _ofTypeMethod = null;
                } 
            }
        } 
 
        public OfTypeExpression() {
        } 

        public OfTypeExpression(Type type) {
            if (type == null) {
                throw new ArgumentNullException("type"); 
            }
            TypeName = type.AssemblyQualifiedName; 
            _ofTypeMethod = GetOfTypeMethod(type); 
        }
 
        // internal for unit testing
        internal OfTypeExpression(Control owner)
            : base(owner) {
        } 

        private Type GetType(string typeName) { 
            if (String.IsNullOrEmpty(typeName)) { 
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                    AtlasWeb.OfTypeExpression_TypeNameNotSpecified, 
                    Owner.ID));
            }
            try {
                return BuildManager.GetType(typeName, true /* throwOnError */, true /* ignoreCase */); 
            } catch (Exception e) {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, 
                    AtlasWeb.OfTypeExpression_CannotFindType, 
                    typeName,
                    Owner.ID), e); 
            }
        }

        private static MethodInfo GetOfTypeMethod(Type type) { 
            Debug.Assert(type != null);
            return typeof(Queryable).GetMethod("OfType").MakeGenericMethod(new Type[] { type }); 
        } 

        public override IQueryable GetQueryable(IQueryable query) { 
            return query.Provider.CreateQuery(Expression.Call(null, OfTypeMethod, query.Expression));
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
#if ORYX_VNEXT 
namespace Microsoft.Web.Data.UI.WebControls.Expressions {
#else
namespace System.Web.UI.WebControls.Expressions {
#endif 
    using System.ComponentModel;
    using System.Diagnostics; 
    using System.Globalization; 
    using System.Linq;
    using System.Linq.Expressions; 
    using System.Reflection;
    using System.Web.Compilation;
    using System.Web.Resources;
    using System; 
    using System.Web.UI;
 
    public class OfTypeExpression : DataSourceExpression { 
        private MethodInfo _ofTypeMethod;
        private string _typeName; 

        private MethodInfo OfTypeMethod {
            get {
                if (_ofTypeMethod == null) { 
                    var type = GetType(TypeName);
 
                    _ofTypeMethod = GetOfTypeMethod(type); 
                }
                return _ofTypeMethod; 
            }
        }

        [DefaultValue("")] 
        public string TypeName {
            get { 
                return _typeName ?? String.Empty; 
            }
            set { 
                if (TypeName != value) {
                    _typeName = value;
                    _ofTypeMethod = null;
                } 
            }
        } 
 
        public OfTypeExpression() {
        } 

        public OfTypeExpression(Type type) {
            if (type == null) {
                throw new ArgumentNullException("type"); 
            }
            TypeName = type.AssemblyQualifiedName; 
            _ofTypeMethod = GetOfTypeMethod(type); 
        }
 
        // internal for unit testing
        internal OfTypeExpression(Control owner)
            : base(owner) {
        } 

        private Type GetType(string typeName) { 
            if (String.IsNullOrEmpty(typeName)) { 
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                    AtlasWeb.OfTypeExpression_TypeNameNotSpecified, 
                    Owner.ID));
            }
            try {
                return BuildManager.GetType(typeName, true /* throwOnError */, true /* ignoreCase */); 
            } catch (Exception e) {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, 
                    AtlasWeb.OfTypeExpression_CannotFindType, 
                    typeName,
                    Owner.ID), e); 
            }
        }

        private static MethodInfo GetOfTypeMethod(Type type) { 
            Debug.Assert(type != null);
            return typeof(Queryable).GetMethod("OfType").MakeGenericMethod(new Type[] { type }); 
        } 

        public override IQueryable GetQueryable(IQueryable query) { 
            return query.Provider.CreateQuery(Expression.Call(null, OfTypeMethod, query.Expression));
        }
    }
} 

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