一、背景

  从数据库中查找的数据没有进行排序操作,在某些场合又需要排序操作,但不可能浪费资源重新从数据库中进行查找,最方便的就是直接在代码上写上,这样俩不误。

二、操作

  第一种:利用视图排序
  此方法最为简单,如果就是根据某一列进行排序,使用这个方法最简单也最美观,该方法默认以升序进行排序,如果想要降序需要和SQL类型添加desc,下面的代码就是这个例子。相关的示例代码如下:

public void test(){
    DataTable dt = new DataTable();

    dt.Columns.Add("描述", typeof(String));
    dt.Columns.Add("数值", typeof(Decimal));

    dt.Rows.Add(new Object[] { "一月", 18 });
    dt.Rows.Add(new Object[] { "二月", 33 });
    dt.Rows.Add(new Object[] { "三月", 20 });
    dt.Rows.Add(new Object[] { "四月", 1 });
    dt.Rows.Add(new Object[] { "五月", 12 });
    dt.Rows.Add(new Object[] { "六月", 8 });

    DataTable sortTable = dt.Clone();

    DataView dv = dt.DefaultView;
    dv.Sort = "数值 desc";
    sortTable = dv.ToTable();
}

  第一种方法结果如图:
结果
  第二种:利用查询排序
  与SQL相似,利用查询条件和sort条件进行查找,如果所做的功能使用的是静态数据(不是实时变化的),可以从数据库中将数据查询下来,然后再利用这个查询进行仿SQL查询,这个可以节省数据库的资源。
  相关排序的语句如下所示:

public void test(){
    DataTable dt = new DataTable();

    dt.Columns.Add("描述", typeof(String));
    dt.Columns.Add("数值", typeof(Decimal));

    dt.Rows.Add(new Object[] { "一月", 18 });
    dt.Rows.Add(new Object[] { "二月", 33 });
    dt.Rows.Add(new Object[] { "三月", 20 });
    dt.Rows.Add(new Object[] { "四月", 1 });
    dt.Rows.Add(new Object[] { "五月", 12 });
    dt.Rows.Add(new Object[] { "六月", 8 });

    DataTable selectTable = dt.Clone();
    DataRow[] rows = dt.Select("1=1", "数值 asc");
    foreach(DataRow dr in rows)
    {
        DataRow newRow = selectTable.NewRow();
        for(int i = 0; i < dt.Columns.Count; i++)
        {
            newRow[dt.Columns[i].ColumnName] = dr[dt.Columns[i].ColumnName];
        }
        selectTable.Rows.Add(newRow);
    }
}

  第二种方法结果图:
结果

  第三种:自己编写排序条件代码
  这种方法是最容易想到的,如果上面两个方法不能满足需求,可以进行自己编写排序方法,道理很简单,通过判断条件将数据进行排序并赋值到table中,这个具体方法随个人想法随意写。

三、总结

  不少问题前人已经遇到并写出了相应的方法,并且方法写的很优秀,在此记录一下,以便以后的编写

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐