好的,我只是快速完成了这个,并没有做所有必要的错误处理和空值检查,但它应该给你一个想法,应该足以让你开始:
public static class DataTableExtensions
{
public static DataView ApplySort(this DataTable table, Comparison<DataRow> comparison)
{
DataTable clone = table.Clone();
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
rows.Add(row);
}
rows.Sort(comparison);
foreach (DataRow row in rows)
{
clone.Rows.Add(row.ItemArray);
}
return clone.DefaultView;
}
}
用法:
DataTable table = new DataTable();
table.Columns.Add("IntValue", typeof(int));
table.Columns.Add("StringValue");
table.Rows.Add(11, "Eleven");
table.Rows.Add(14, "Fourteen");
table.Rows.Add(10, "Ten");
table.Rows.Add(12, "Twelve");
table.Rows.Add(13, "Thirteen");
//按字符串值排序:
DataView sorted = table.ApplySort((r, r2) =>
{
return ((string)r["StringValue"]).CompareTo(((string)r2["StringValue"]));
});
结果:
11 十一
14 十四
10 十
13 十三
12 十二
//按 IntValue 排序:
DataView sorted = table.ApplySort((r, r2) =>
{
return ((int)r["IntValue"]).CompareTo(((int)r2["IntValue"]));
});
结果:
10 十
11 十一
13 十三
12 十二
14 十四
编辑:将其更改为扩展方法。
现在在您的 Lambda 中(或者您可以创建一个完整的比较方法),您可以执行您需要的任何类型的自定义排序逻辑。请记住,-1 小于,0 等于,1 大于。