C#如何从List集合当中取出子集合

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

今天项目要求随机从数据库中随机取出若干条数据,放到首页。那么要如何随机取出这个子集合呢?本人向到的方法如下:

1、假设数据量很少,如我数据库中只有10条数据,而我要求随机取出8条。对于这种低数据量,大可以一次过全部取出放到父集合当中,然后随机remove去两条。

List<Model> list =newMyService().QueryList().ToList();

Random random=newRandom();//注意,不能在while里面创建random因子,因为这样会导致随机因子失效。while(list.Count()>8)

{intindex=random.Next(list.Count());

list.RemoveAt(index);

}

2、假设数据量适中,我测试的表格数据量是387332条数据,id是uniqueidentifier类型,共取出8条数据,一共用了3秒时间。(如果id是int的自增类型,会更快)。

Random random =newRandom();

StringBuilder sb=newStringBuilder();

sb.Append("select * from (select ROW_NUMBER()Over(ORDER BY 某一字段) as 'x',* from tablename) as a where");//假设你要从中取8条数据inttotal =newMyService().QueryCount();//假设这个是表格数据的总条数intcount = total /8;for(inti =0; i <8; i++)

{if(i ==7)

{//最后一次sb.Append("a.x="+ random.Next(count *i, total).ToString());

}else{//不是最后一次sb.Append("a.x="+ random.Next(count * i, count * (i +1)).ToString()+"or");

}

}stringsql =sb.ToString();//最后得出了sql语句,现在就可以查出 以count为间隔 的随机集合。

3、如果数据量很巨大,得到百万千万级的,那么就需要数据库本身的索引来处理了,最常见的便是自增型的id,因为以这个id来order排序相当于不用排序。其他情况我也没很深的理解,网上资料很多,只有自行查阅了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航