public static System.Collections.Generic.IEnumerable <T> Sort <T>(this System.Collections.Generic.IEnumerable <T> source, string sortDirection, string sortKey) { sortKey = sortKey.ToUpper(); Func <T, string> keySelector = delegate(T item) { System.Collections.Generic.IDictionary <string, object> dictionary; if (item is System.Collections.Generic.IDictionary <string, object> ) { dictionary = (item as System.Collections.Generic.IDictionary <string, object>); } else { dictionary = item.toStrObjDict(); } string result; if (dictionary.ContainsKey(sortKey)) { result = Utils.GetString(dictionary[sortKey]); } else { result = string.Empty; } return(result); }; return(source.Sort(sortDirection, keySelector, delegate(string a, string b) { int result; if (a.IsDateTime() && b.IsDateTime()) { result = System.Convert.ToDateTime(a).CompareTo(System.Convert.ToDateTime(b)); } else { if (a.IsNumeric() && b.IsNumeric()) { result = System.Convert.ToInt32(a).CompareTo(System.Convert.ToInt32(b)); } else { result = a.CompareTo(b); } } return result; })); }