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();