• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

            List<Model> list = new  MyService().QueryList().ToList();
            Random random=new Random();   //注意,不能在while里面创建random因子,因为这样会导致随机因子失效。
            while(list.Count()>8)
            {
                int index=random.Next(list.Count());
                list.RemoveAt(index);
            }        

 

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

            Random random = new Random();
            StringBuilder sb = new StringBuilder();

            sb.Append("select * from (select ROW_NUMBER()Over(ORDER BY 某一字段) as 'x',* from tablename) as a where ");
            //假设你要从中取8条数据
            int total = new MyService().QueryCount();  //假设这个是表格数据的总条数
            int count = total / 8;
            for (int i = 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"); 
                }
            }
            string sql = sb.ToString();
            //最后得出了sql语句,现在就可以查出 以count为间隔 的随机集合。

 

 

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C语言-栈和单链表的实现发布时间:2022-07-13
下一篇:
聊聊C#中的composite模式发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap