DataView.Sort-不仅仅是asc / desc(需要自定义排序)
我有一个从数据集构建的报告。数据集使用Sort属性对数据进行排序。我知道我可以创建这样的排序表达式:
“字段描述,字段2递增”
但是我现在需要的是一种进行自定义排序的方法。在SQL中,我可以通过执行以下操作来执行自定义排序:
order by case when field = 'Some Value' then 0 end
case when field = 'Another Value' then 1 end
从根本上重新定义我的排序(即,某些值先于其他值)。
是否可以对DataView做类似排序表达式的操作?
回答:
好的,我只是快速地提出了建议,并没有进行所有必要的错误处理和null检查,但是它应该给您一个想法,并且应该足以使您入门:
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");
//按StringValue排序:
DataView sorted = table.ApplySort((r, r2) => {
return ((string)r["StringValue"]).CompareTo(((string)r2["StringValue"]));
});
结果:
11点11分
14十四
10十
13十三
12十二
//按IntValue排序:
DataView sorted = table.ApplySort((r, r2) => {
return ((int)r["IntValue"]).CompareTo(((int)r2["IntValue"]));
});
结果:
10十
11点11分
13十三
12十二
14十四
编辑:更改为扩展方法。
现在,在Lambda中(或您可以创建完整的比较方法),您可以执行所需的任何类型的自定义排序逻辑。请记住,-1小于,0等于,1大于。
以上是 DataView.Sort-不仅仅是asc / desc(需要自定义排序) 的全部内容, 来源链接: utcz.com/qa/423149.html