我想使用以下方法实现自然排序:
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
的名称空间。