C#中的自然排序顺序 - 实现

时间:2017-01-06 11:29:01

标签: c# asp.net sorting

我想用这个实现自然排序:

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>一无所知。

1 个答案:

答案 0 :(得分:1)

我相信你想这样使用它:

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

请务必打开包含您使用此代码的OrderByAlphaNumeric的命名空间。