我想使用以下方法实现自然排序:

public static IEnumerable<T> OrderByAlphaNumeric<T>(this IEnumerable<T> source, Func<T, string> selector)
{
    int max = source
        .SelectMany(i => Regex.Matches(selector(i), @"\d+").Cast<Match>().Select(m => (int?)m.Value.Length))
        .Max() ?? 0;

    return source.OrderBy(i => Regex.Replace(selector(i), @"\d+", m => m.Value.PadLeft(max, '0')));
}


(摘自Natural Sort Order in C#

我有一个dataview dv,其中(其中包括)一列code_name。我想将此数据视图的数据复制到新的datatable dtNew中,并在列code_name上进行自然排序。我猜代码应该是这样的:

DataTable dtNew = dv.Table.AsEnumerable().OrderBy(x => x.Field<string>("code_name"),OrderByAlphaNumeric<T>).CopyToDataTable();


但是在上下文中,我对如何操作IEnumerable<T> OrderByAlphaNumeric<T>一无所知。

最佳答案

我相信您想像这样使用它:

DataTable dtNew = dv.Table.AsEnumerable().OrderByAlphaNumeric(x => x.Field<string>("code_name")).CopyToDataTable();


确保在使用此代码的地方打开包含OrderByAlphaNumeric的名称空间。

10-08 17:27