日期:2014-05-20  浏览次数:20692 次

sql数据排序问题
数据库表:
id name state

1 n1 成功
2 n2 失败
3 n3 成功
4 n4 其它
5 n5 失败
6 n6 成功
7 n7 成功
8 n8 其它
9 n9 其它
-------------------
这个表的数据按查询条件查出来有50万条,通过sql查询后放入IDataReader,在while (dr.Read())内进行筛选分页
int pageIndex=1;//当前页
int pageSize=5;//每页读取数量
public List<Entity> test()
{
List<Entity> list=new List<Entity>();
using (IDataReader dr = this._helper.ExecuteReader(CommandType.Text, sqlStr, whereParamCollection))
{
  int n = 0;
  while (dr.Read())
  {
  n++;
  if (n <= pageIndex * pageSize)
  {
  continue;
  }
  else
  if (n > (pageIndex + 1) * pageSize)
  {
  break;
  }
  list.Add(Populate_Entity_FromDr(dr));//将当前的数据转换成实体放入List<Entity>中
  }
  if (!dr.IsClosed)
  dr.Close();
  }
  return list;
}


现在的问题是:
test方法返回List<Entity>数据顺序做调整。

1、将state等于成功的数据分成两半,假设state="成功" 的共有10页,前5页的数据放到整个分页的最前5页,后5页的数据放到整个分页的最后5页。

2、将state="失败" 的记录放到整个分页的中间

3、将state="其它" 10%的记录修改为state="其它1",其它的90%修改为state="其它2",这两个比例的记录放到整个分页的中间

以前的调整不会修改数据库里面的数据,只是在页面上显示时调整数据的分布。

在此先谢谢!



------解决方案--------------------
那你还是自己写个方法,将数据重新组织一下吧,比如你查询时,按照state方法排序,如果true的都在前面,那么你遍历一下,把后50个加到最后
------解决方案--------------------
这么麻烦,建议你借助临时表按照你的逻辑存储,调用简单的分页存储过程即可。