using System; using System.Data; using System.Linq; using System.Text.RegularExpressions; /// <summary> /// This static class provides statics methods to naturally sort a datatable column. /// </summary> public static class NaturalSortService { /// <summary> /// /// </summary> /// <param name="table">DataTable with DataRows to be sorted</param> /// <param name="ColumnToSort">The name of the column to sort</param> /// <returns>Returns an EnumerableRowCollection of a DataRow type. The Collection is sorted naturally in a single column.</returns> public static System.Data.EnumerableRowCollection<System.Data.DataRow> Sort(DataTable table, string ColumnToSort) { //Used to determine numerical values which are placed first in importance. Func<string, object> convert = str => { int returnInt = 0; if (int.TryParse(str, out returnInt)) return returnInt; else return str; }; //Using the EnumerableComparer from TestSampleResults.Domain.Services.EnumerableComparer var sorted = (from t in table.AsEnumerable() select t).OrderBy( str => Regex.Split(str.Field<string>(ColumnToSort).Replace(" ", ""), "([0-9]+)").Select(convert), new EnumerableComparer<object>()); return sorted; } }