importing messaging-2008 branch to trunk, going on.
[mono.git] / mcs / class / System.Data.DataSetExtensions / System.Data / EnumerableRowCollectionExtensions.cs
index cac96d18edfe568daf6280d6bf4151c3391d00c4..e1b2fed3ea76a9724a887ae0e4f526efeff3b516 100644 (file)
 
 using System;
 using System.Collections.Generic;
+using System.Linq;
 
 namespace System.Data
 {
        public static class EnumerableRowCollectionExtensions
        {
-               [MonoTODO]
                public static EnumerableRowCollection<TResult> Cast<TResult> (this EnumerableRowCollection source)
                {
-                       throw new NotImplementedException ();
+                       return new EnumerableRowCollection<TResult> (Enumerable.Cast<TResult> (source));
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey> (this EnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector)
                {
                        return OrderBy<TRow, TKey> (source, keySelector, Comparer<TKey>.Default);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey> (this EnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector, IComparer<TKey> comparer)
                {
-                       throw new NotImplementedException ();
+                       return OrderedEnumerableRowCollection<TRow>.Create<TRow, TKey> (source, keySelector, comparer, false);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey> (this EnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector)
                {
                        return OrderByDescending<TRow, TKey> (source, keySelector, Comparer<TKey>.Default);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey> (this EnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector, IComparer<TKey> comparer)
                {
-                       throw new NotImplementedException ();
+                       return OrderedEnumerableRowCollection<TRow>.Create<TRow, TKey> (source, keySelector, comparer, true);
                }
 
                public static EnumerableRowCollection<S> Select<TRow, S> (this EnumerableRowCollection<TRow> source, Func<TRow, S> selector)
                {
-                       return new EnumerableRowCollection<S> (RunSelect<TRow, S> (source, selector));
+                       return new EnumerableRowCollection<S> (Enumerable.Select<TRow, S> (source, selector));
                }
 
-               static IEnumerable<S> RunSelect<TRow, S> (this EnumerableRowCollection<TRow> source, Func<TRow, S> selector)
-               {
-                       foreach (TRow row in source)
-                               yield return selector (row);
-               }
-
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> ThenBy<TRow, TKey> (this OrderedEnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector)
                {
                        return ThenBy<TRow, TKey> (source, keySelector, Comparer<TKey>.Default);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> ThenBy<TRow, TKey> (this OrderedEnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector, IComparer<TKey> comparer)
                {
-                       throw new NotImplementedException ();
+                       return OrderedEnumerableRowCollection<TRow>.AddSort<TRow, TKey> (source, keySelector, comparer, false);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> ThenByDescending<TRow, TKey> (this OrderedEnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector)
                {
                        return ThenByDescending<TRow, TKey> (source, keySelector, Comparer<TKey>.Default);
                }
 
-               [MonoTODO]
                public static OrderedEnumerableRowCollection<TRow> ThenByDescending<TRow, TKey> (this OrderedEnumerableRowCollection<TRow> source, Func<TRow, TKey> keySelector, IComparer<TKey> comparer)
                {
-                       throw new NotImplementedException ();
+                       return OrderedEnumerableRowCollection<TRow>.AddSort<TRow, TKey> (source, keySelector, comparer, true);
                }
 
                public static EnumerableRowCollection<TRow> Where<TRow> (this EnumerableRowCollection<TRow> source, Func<TRow, bool> predicate)
                {
-                       return new EnumerableRowCollection<TRow> (RunWhere<TRow> (source, predicate));
-               }
-
-               static IEnumerable<TRow> RunWhere<TRow> (EnumerableRowCollection<TRow> source, Func<TRow, bool> predicate)
-               {
-                       foreach (TRow row in source)
-                               if (predicate (row))
-                                       yield return row;
+                       return new EnumerableRowCollection<TRow> (Enumerable.Where<TRow> (source, predicate));
                }
        }
 }