使用DataTable的DefaultView中Sort方法排序,如果遇见数字类型就会有问题
1、补齐年龄位数(不建议)
#region 补齐年龄位数,然后排序 foreach (DataRow item in dt.Rows) { item["Age"] = item["Age"].ToString().PadLeft(2, '0'); } dt.DefaultView.Sort = "Age ASC"; dt = dt.DefaultView.ToTable(); #endregion
2、增加一列,判断年龄长度然后排序
#region 增加一列,判断年龄长度然后排序 dt.Columns.Add("AgeLength", typeof(int), "len(Age)"); dt.DefaultView.Sort = "AgeLength,Age ASC"; dt = dt.DefaultView.ToTable(); #endregion
3、克隆表结构,将年龄列数据类型修改为数字类型
#region 克隆表结构,将年龄列数据类型修改为数字类型 DataTable dtNew = dt.Clone(); dtNew.Columns[1].DataType = typeof(int); foreach (DataRow item in dt.Rows) { dtNew.ImportRow(item); } dtNew.DefaultView.Sort = "Age ASC"; dtNew = dtNew.DefaultView.ToTable(); #endregion
4、利用linq将dataTable转换为集合,然后排序
#region 利用linq将dataTable转换为集合,然后排序 dt = dt.Rows.Cast<DataRow>().OrderBy(r => int.Parse(r["Age"].ToString())).CopyToDataTable(); #endregion
参考 https://www.jb51.net/article/43343.htm