在 C# 中的自然排序顺序执行

标签: Asp.net C#
发布时间: 2017/2/25 3:40:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想实现使用这自然排序︰

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')));
}

(取自在 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:

我相信你想要使用它像这样︰

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

请务必打开命名空间包含 OrderByAlphaNumeric 使用这段代码的位置。

赞助商