using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using LANCommander.SDK.Enums; namespace LANCommander.SDK.Extensions { public static class IEnumerableExtensions { static Regex TitleComparisonExpression = new Regex(@"^(?:a|the|an)\s+", RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); public static IOrderedEnumerable OrderByTitle(this IEnumerable items, Func keySelector, SortDirection direction = SortDirection.Ascending) { switch (direction) { case SortDirection.Ascending: default: return items.OrderBy(i => { var key = keySelector.Invoke(i); return TitleComparisonExpression.Replace(key, ""); }); case SortDirection.Descending: return items.OrderByDescending(i => { var key = keySelector.Invoke(i); return TitleComparisonExpression.Replace(key, ""); }); } } public static IOrderedEnumerable OrderBy(this IEnumerable items, Func keySelector, SortDirection direction) { switch (direction) { case SortDirection.Descending: return items.OrderByDescending(keySelector); case SortDirection.Ascending: default: return items.OrderBy(keySelector); } } } }