对保持0值到最后的DataView进行排序

本文关键字:DataView 排序 最后的 | 更新日期: 2023-09-27 18:17:38

我的dataview dv中有以下值:

  1,2,0,4,2,1,0,0

我想按升序排序,同时保持0值到最后,像这样:

  1,1,2,2,4,0,0,0

我正在做这个:

   DataSet ds = (DataSet)Session["test"];
   DataTable dt = ds.Tables[0];
   DataView dv = new DataView(dt);
   dv.Sort = "Value";

输出如下:

 0,0,0,1,1,2,2,4

是否有办法让0值一直到最后?

我也尝试过使用dv.RowFilter,但完全排除了0。我想包括0的。我能做到吗?

对保持0值到最后的DataView进行排序

你可以使用Linq-To-DataSet,它也更强大,更不容易出错,更可读。

DataTable orderedTable = ds.Tables[0].AsEnumerable()
    .OrderBy(row => row.Field<int>("Value") == 0)
    .ThenBy(row => row.Field<int>("Value"))
    .CopyToDataTable();

此操作有效,因为如果row.Field<int>("Value") == 0的值为0,则返回boolEnumerable.OrderBy按升序排列(与OrderByDescending相反),因为true可以理解为1,false可以理解为0,所以Value=0都排在最后。