当我们取到数据并存在DataTable里的时候,想要不改变排序规则,但同时想要的根据某一列计算出的排名的时候,不仅可以在SqlServer里使用Rank函数,也可以对DataTable进行排名操作。
代码如下:
var resultDt= FindTable(strSql.ToString(), false);
DataTable newdt = new DataTable();
newdt = resultDt.Copy();
DataView dv = newdt.DefaultView;
dv.Sort = "percentIns ASC";//排名次列
newdt = dv.ToTable();
int k = newdt.Rows.Count;
foreach (DataRow dow in newdt.Rows)
{
foreach (DataRow row2 in resultDt.Select("percentIns = '" + dow["percentIns"] + "'"))
{
row2["rankInsPercent"] = k;
}
k--;
}
思路为:
- copy一个DataTable对象
- 对新的DataTable对象进行排序操作
- 通过遍历获得新的DataTable在原DatTable里的排序情况,K记录下标并递减或递增