c#代码Linq中使用OrderBy进行自定义排序
/// <summary>/// 自定义字符串比较器 用于自定义排序/// </summary>public class StringComparer : IComparer<string>{/// <summary>/// 偏好的排序列表/// </summary>public List<string> _preferenceList;/// <summary>/// 构造函数/// </summary>/// <param name="preferenceList">偏好的排序列表</param>public StringComparer(List<string> preferenceList){_preferenceList = preferenceList ?? new List<string>();}/// <summary>/// 执行比较/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public int Compare(string x, string y){if (!_preferenceList.Any()){return DefaultCompare(x, y);}var index_x = _preferenceList.IndexOf(x);var index_y = _preferenceList.IndexOf(y);if (index_x > index_y){return 1; //1表示 x排在y前 -1表示x排在y后}if (index_x == index_y){return 0;}if (index_x < index_y){return -1;}return 0;}/// <summary>/// 默认比较/// </summary>private int DefaultCompare(string x, string y){return string.Compare(x, y, false, CultureInfo.CurrentCulture);}}
调用时
var compair = new Util.StringComparer(getDataHistoryStart.Identifiers);var groups = datas.GroupBy(e => e.Pn).OrderBy(a=>a.Key, compair).ToList();