EnumerableRowCollectionExtensions.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 / DataSet / System / Data / EnumerableRowCollectionExtensions.cs / 1305376 / EnumerableRowCollectionExtensions.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
// [....]
//----------------------------------------------------------------------------- 
 
using System;
using System.Collections.Generic; 
using System.Linq;
using System.Linq.Expressions;
using System.Globalization;
using System.Diagnostics; 

namespace System.Data 
{ 
    /// 
    /// This static class defines the extension methods that add LINQ operator functionality 
    /// within IEnumerableDT and IOrderedEnumerableDT.
    /// 
    public static class EnumerableRowCollectionExtensions
    { 
        /// 
        /// LINQ's Where operator for generic EnumerableRowCollection. 
        ///  
        public static EnumerableRowCollection Where(
                                                this EnumerableRowCollection source, 
                                                Func predicate)
        {
            EnumerableRowCollection edt =
                new EnumerableRowCollection(source, Enumerable.Where(source, predicate), null); //copy constructor 
            edt.AddPredicate(predicate);
            return edt; 
        } 

        ///  
        /// LINQ's OrderBy operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection OrderBy(
                                                        this EnumerableRowCollection source, 
                                                        Func keySelector)
        { 
            IEnumerable ie = Enumerable.OrderBy(source, keySelector); 

            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie); 
            edt.AddSortExpression(keySelector, false, true);
            return edt;
        }
 
        /// 
        /// LINQ's OrderBy operator for generic EnumerableRowCollection. 
        ///  
        public static OrderedEnumerableRowCollection OrderBy(
                                                        this EnumerableRowCollection source, 
                                                        Func keySelector,
                                                        IComparer comparer)
        {
            IEnumerable ie = Enumerable.OrderBy(source, keySelector, comparer); 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie);
            edt.AddSortExpression(keySelector, comparer, false, true); 
            return edt; 
        }
 
        /// 
        /// LINQ's OrderByDescending operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection OrderByDescending( 
                                                        this EnumerableRowCollection source,
                                                        Func keySelector) 
        { 
            IEnumerable ie = Enumerable.OrderByDescending(source, keySelector);
 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie);
            edt.AddSortExpression(keySelector, true, true);
            return edt;
        } 

        ///  
        /// LINQ's OrderByDescending operator for generic EnumerableRowCollection. 
        /// 
        public static OrderedEnumerableRowCollection OrderByDescending( 
                                                        this EnumerableRowCollection source,
                                                        Func keySelector,
                                                        IComparer comparer)
        { 
            IEnumerable ie = Enumerable.OrderByDescending(source, keySelector, comparer);
 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie); 
            edt.AddSortExpression(keySelector, comparer, true, true);
            return edt; 
        }

        /// 
        /// LINQ's ThenBy operator for generic EnumerableRowCollection. 
        /// 
        public static OrderedEnumerableRowCollection ThenBy( 
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector)
        { 
            IEnumerable ie =
                Enumerable.ThenBy((IOrderedEnumerable)source.EnumerableRows, keySelector);

            OrderedEnumerableRowCollection edt = 
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie);
 
            edt.AddSortExpression(keySelector, /*isDesc*/ false, /*isOrderBy*/ false); 
            return edt;
        } 

        /// 
        /// LINQ's ThenBy operator for generic EnumerableRowCollection.
        ///  
        public static OrderedEnumerableRowCollection ThenBy(
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector, 
                                                        IComparer comparer)
        { 
            IEnumerable ie =
                Enumerable.ThenBy((IOrderedEnumerable)source.EnumerableRows, keySelector, comparer);

            OrderedEnumerableRowCollection edt = 
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie);
 
            edt.AddSortExpression(keySelector, comparer, false, false); 
            return edt;
        } 

        /// 
        /// LINQ's ThenByDescending operator for generic EnumerableRowCollection.
        ///  
        public static OrderedEnumerableRowCollection ThenByDescending(
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector) 
        {
            IEnumerable ie = 
                Enumerable.ThenByDescending((IOrderedEnumerable)source.EnumerableRows, keySelector);

            OrderedEnumerableRowCollection edt =
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie); 

            edt.AddSortExpression(keySelector, /*desc*/ true, false); 
            return edt; 
        }
 
        /// 
        /// LINQ's ThenByDescending operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection ThenByDescending( 
                                                        this OrderedEnumerableRowCollection source,
                                                        Func keySelector, 
                                                        IComparer comparer) 
        {
            IEnumerable ie = 
                Enumerable.ThenByDescending((IOrderedEnumerable)source.EnumerableRows, keySelector, comparer);

            OrderedEnumerableRowCollection edt =
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie); 

            edt.AddSortExpression(keySelector, comparer, true, false); 
            return edt; 
        }
 
        /// 
        /// Executes a Select (Projection) on EnumerableDataTable. If the selector returns a different
        /// type than the type of rows, then AsLinqDataView is disabled, and the returning EnumerableDataTable
        /// represents an enumerable over the LINQ Query. 
        /// 
        public static EnumerableRowCollection Select( 
                                                this EnumerableRowCollection source, 
                                                Func selector)
        { 
            //Anonymous type or some other type
            //The only thing that matters from this point on is _enumerableRows

            IEnumerable typedEnumerable = Enumerable.Select(source, selector); 

            // Dont need predicates or sort expression from this point on since we know 
            // AsLinqDataView is disabled. 
            return new EnumerableRowCollection(((object)source) as EnumerableRowCollection,
                                                  typedEnumerable, 
                                                  ((object)selector) as Func);
        }

        ///  
        /// Casts an EnumerableDataTable_TSource into EnumerableDataTable_TResult
        ///  
        public static EnumerableRowCollection Cast(this EnumerableRowCollection source) 
        {
            // Since Cast does not have the signature Cast_T_R(..) this call is routed 
            // through the non-generic base class EnumerableDataTable

            if ((null != source) && source.ElementType.Equals(typeof(TResult)))
            { 
                return (EnumerableRowCollection)(object)source;
            } 
            else 
            {   //Anonymous type or some other type
                //The only thing that matters from this point on is _enumerableRows 

                IEnumerable typedEnumerable = Enumerable.Cast(source);

                EnumerableRowCollection newEdt = new EnumerableRowCollection( 
                    typedEnumerable,
                    typeof(TResult).IsAssignableFrom(source.ElementType) && typeof(DataRow).IsAssignableFrom(typeof(TResult)), 
                    source.Table); 

                return newEdt; 
            }
        }
    } //end class
} 

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

namespace System.Data 
{ 
    /// 
    /// This static class defines the extension methods that add LINQ operator functionality 
    /// within IEnumerableDT and IOrderedEnumerableDT.
    /// 
    public static class EnumerableRowCollectionExtensions
    { 
        /// 
        /// LINQ's Where operator for generic EnumerableRowCollection. 
        ///  
        public static EnumerableRowCollection Where(
                                                this EnumerableRowCollection source, 
                                                Func predicate)
        {
            EnumerableRowCollection edt =
                new EnumerableRowCollection(source, Enumerable.Where(source, predicate), null); //copy constructor 
            edt.AddPredicate(predicate);
            return edt; 
        } 

        ///  
        /// LINQ's OrderBy operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection OrderBy(
                                                        this EnumerableRowCollection source, 
                                                        Func keySelector)
        { 
            IEnumerable ie = Enumerable.OrderBy(source, keySelector); 

            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie); 
            edt.AddSortExpression(keySelector, false, true);
            return edt;
        }
 
        /// 
        /// LINQ's OrderBy operator for generic EnumerableRowCollection. 
        ///  
        public static OrderedEnumerableRowCollection OrderBy(
                                                        this EnumerableRowCollection source, 
                                                        Func keySelector,
                                                        IComparer comparer)
        {
            IEnumerable ie = Enumerable.OrderBy(source, keySelector, comparer); 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie);
            edt.AddSortExpression(keySelector, comparer, false, true); 
            return edt; 
        }
 
        /// 
        /// LINQ's OrderByDescending operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection OrderByDescending( 
                                                        this EnumerableRowCollection source,
                                                        Func keySelector) 
        { 
            IEnumerable ie = Enumerable.OrderByDescending(source, keySelector);
 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie);
            edt.AddSortExpression(keySelector, true, true);
            return edt;
        } 

        ///  
        /// LINQ's OrderByDescending operator for generic EnumerableRowCollection. 
        /// 
        public static OrderedEnumerableRowCollection OrderByDescending( 
                                                        this EnumerableRowCollection source,
                                                        Func keySelector,
                                                        IComparer comparer)
        { 
            IEnumerable ie = Enumerable.OrderByDescending(source, keySelector, comparer);
 
            OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection(source, ie); 
            edt.AddSortExpression(keySelector, comparer, true, true);
            return edt; 
        }

        /// 
        /// LINQ's ThenBy operator for generic EnumerableRowCollection. 
        /// 
        public static OrderedEnumerableRowCollection ThenBy( 
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector)
        { 
            IEnumerable ie =
                Enumerable.ThenBy((IOrderedEnumerable)source.EnumerableRows, keySelector);

            OrderedEnumerableRowCollection edt = 
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie);
 
            edt.AddSortExpression(keySelector, /*isDesc*/ false, /*isOrderBy*/ false); 
            return edt;
        } 

        /// 
        /// LINQ's ThenBy operator for generic EnumerableRowCollection.
        ///  
        public static OrderedEnumerableRowCollection ThenBy(
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector, 
                                                        IComparer comparer)
        { 
            IEnumerable ie =
                Enumerable.ThenBy((IOrderedEnumerable)source.EnumerableRows, keySelector, comparer);

            OrderedEnumerableRowCollection edt = 
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie);
 
            edt.AddSortExpression(keySelector, comparer, false, false); 
            return edt;
        } 

        /// 
        /// LINQ's ThenByDescending operator for generic EnumerableRowCollection.
        ///  
        public static OrderedEnumerableRowCollection ThenByDescending(
                                                        this OrderedEnumerableRowCollection source, 
                                                        Func keySelector) 
        {
            IEnumerable ie = 
                Enumerable.ThenByDescending((IOrderedEnumerable)source.EnumerableRows, keySelector);

            OrderedEnumerableRowCollection edt =
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie); 

            edt.AddSortExpression(keySelector, /*desc*/ true, false); 
            return edt; 
        }
 
        /// 
        /// LINQ's ThenByDescending operator for generic EnumerableRowCollection.
        /// 
        public static OrderedEnumerableRowCollection ThenByDescending( 
                                                        this OrderedEnumerableRowCollection source,
                                                        Func keySelector, 
                                                        IComparer comparer) 
        {
            IEnumerable ie = 
                Enumerable.ThenByDescending((IOrderedEnumerable)source.EnumerableRows, keySelector, comparer);

            OrderedEnumerableRowCollection edt =
                new OrderedEnumerableRowCollection((EnumerableRowCollection)source, ie); 

            edt.AddSortExpression(keySelector, comparer, true, false); 
            return edt; 
        }
 
        /// 
        /// Executes a Select (Projection) on EnumerableDataTable. If the selector returns a different
        /// type than the type of rows, then AsLinqDataView is disabled, and the returning EnumerableDataTable
        /// represents an enumerable over the LINQ Query. 
        /// 
        public static EnumerableRowCollection Select( 
                                                this EnumerableRowCollection source, 
                                                Func selector)
        { 
            //Anonymous type or some other type
            //The only thing that matters from this point on is _enumerableRows

            IEnumerable typedEnumerable = Enumerable.Select(source, selector); 

            // Dont need predicates or sort expression from this point on since we know 
            // AsLinqDataView is disabled. 
            return new EnumerableRowCollection(((object)source) as EnumerableRowCollection,
                                                  typedEnumerable, 
                                                  ((object)selector) as Func);
        }

        ///  
        /// Casts an EnumerableDataTable_TSource into EnumerableDataTable_TResult
        ///  
        public static EnumerableRowCollection Cast(this EnumerableRowCollection source) 
        {
            // Since Cast does not have the signature Cast_T_R(..) this call is routed 
            // through the non-generic base class EnumerableDataTable

            if ((null != source) && source.ElementType.Equals(typeof(TResult)))
            { 
                return (EnumerableRowCollection)(object)source;
            } 
            else 
            {   //Anonymous type or some other type
                //The only thing that matters from this point on is _enumerableRows 

                IEnumerable typedEnumerable = Enumerable.Cast(source);

                EnumerableRowCollection newEdt = new EnumerableRowCollection( 
                    typedEnumerable,
                    typeof(TResult).IsAssignableFrom(source.ElementType) && typeof(DataRow).IsAssignableFrom(typeof(TResult)), 
                    source.Table); 

                return newEdt; 
            }
        }
    } //end class
} 

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