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

回到顶部