public SorterComparer GetComparer(bool ascending) { lock (ComparerLock) { PrepareSort(); if (ascending) { if (AscendingSorter == null) { AscendingSorter = new SorterComparer(this, ascending); } return(AscendingSorter); } else { if (DescendingSorter == null) { DescendingSorter = new SorterComparer(this, ascending); } return(DescendingSorter); } } }
private void Invalidate() { lock (ComparerLock) { AscendingSorter = null; DescendingSorter = null; } }
public static ISorterEnumerable <TElement> ThenByDescending <TElement, TKey>(this ISorterEnumerable <TElement> source, Func <TElement, TKey> keySelector, IComparer <TKey> comparer) { var sourceComparer = source.Comparer; var nextComparer = new SorterComparer <TElement, TKey>(comparer, keySelector, true); sourceComparer.Next = nextComparer; return(source); }
public static ISorterEnumerable <TElement> SortByDescending <TElement, TKey>(this ParallelQuery <TElement> source, Func <TElement, TKey> keySelector, IComparer <TKey> comparer, ISorter <TElement> sorter) { var sorterComparer = new SorterComparer <TElement, TKey>(comparer, keySelector, true); return(new SorterEnumerable <TElement>(source, sorterComparer, sorter, true)); }
public static ISorterEnumerable <TElement> SortBy <TElement, TKey>(this IEnumerable <TElement> source, Func <TElement, TKey> keySelector, IComparer <TKey> comparer, ISorter <TElement> sorter) { var sorterComparer = new SorterComparer <TElement, TKey>(comparer, keySelector, false); return(new SorterEnumerable <TElement>(source, sorterComparer, sorter, false)); }