C# 如何从List集合当中取出子集合
今天项目要求随机从数据库中随机取出若干条数据,放到首页。那么要如何随机取出这个子集合呢?本人向到的方法如下:
1、假设数据量很少,如我数据库中只有10条数据,而我要求随机取出8条。对于这种低数据量,大可以一次过全部取出放到父集合当中,然后随机remove去两条。
List<Model> list = new MyService().QueryList().ToList();
Random random=new Random(); //注意,不能在while里面创建random因子,因为这样会导致随机因子失效。
while(list.Count()>)
{
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 / ;
for (int i = ; i < ; i++)
{
if (i == )
{
//最后一次
sb.Append(" a.x=" + random.Next(count * i, total).ToString());
}
else
{
//不是最后一次
sb.Append(" a.x=" + random.Next(count * i, count * (i + )).ToString()+" or");
}
}
string sql = sb.ToString();
//最后得出了sql语句,现在就可以查出 以count为间隔 的随机集合。
3、如果数据量很巨大,得到百万千万级的,那么就需要数据库本身的索引来处理了,最常见的便是自增型的id,因为以这个id来order排序相当于不用排序。其他情况我也没很深的理解,网上资料很多,只有自行查阅了。
C# 如何从List集合当中取出子集合的更多相关文章
- [LeetCode] Subsets 子集合
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- [LeetCode] 78. Subsets 子集合
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)
1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...
- PHP的排列组合问题 分别从每一个集合中取出一个元素进行组合,问有多少种组合?
首先说明这是一个数学的排列组合问题C(m,n) = m!/(n!*(m-n)!) 比如:有集合('粉色','红色','蓝色','黑色'),('38码','39码','40码'),('大号','中号') ...
- LeetCode 78. Subsets(子集合)
Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...
- linq根据传入数据集合查询对应子级数据
工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...
- linq依据传入数据集合查询相应子级数据
工作中经经常使用到的linq依据传入数据集合查询相应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点相应ID数据集合,再依据ID数据集合查询所有子级数据. //获取缓存 ...
- java8之list集合中取出某一属性的方法
上代码 List<User> list = new ArrayList<User>(); User user1 = new User("第一位"," ...
- [LeetCode] 916. Word Subsets 单词子集合
We are given two arrays A and B of words. Each word is a string of lowercase letters. Now, say that ...
随机推荐
- Train Problem II(卡特兰数+大数乘除)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 多校联合练习赛1 Problem1005 Deque LIS+LDS 再加一系列优化
Deque Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 服务管理——ntp
一 ntp相关知识 什么是时间同步服务器 Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可 ...
- 【POJ 1125】Stockbroker Grapevine
id=1125">[POJ 1125]Stockbroker Grapevine 最短路 只是这题数据非常水. . 主要想大牛们试试南阳OJ同题 链接例如以下: http://acm. ...
- checkbox和radio的样式美化问题
如果你下定决心要改变现有的默认的checkbox和radio的样式,那么我目前有两种办法: 1.自己动手写一个,也就是自己写代码实现将input的checkbox和radio默认的样式隐藏掉,使用绝对 ...
- DevExpress]ChartControl 创建Drill-Down样式的Title
关键代码: /// <summary> /// 创建Drill-Down样式的Title /// </summary> /// <param name="cha ...
- wcf 速成,转的啊 第一天
作为WCF速成系列,只介绍些项目开发中常用到的实战知识. 学习wcf,还是对其中的几个术语要了解一下.wcf中有一个ABC的概念,就是 第一: "A" 是地址,就是告诉别人我wcf ...
- 今天是迅驰ORM的诞生之日。
欢迎各位朋友来造访,最主要还是那一点:版权所有,请尊重驰哥的著作版权,侵权必追究法律责任. 最后来一句刘德华的歌曲:独自去偷欢,我谢绝你监管!快乐心中常为我伴.
- api (三)文本字符输出 (转)
在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大核心组件之一的GDI32.dll封装了所有的文本和 ...
- 剑指offer第10题
import java.util.Scanner; /* 前两种方法是看最低为是不是为1,不为1则向右移动. 第一种只能对正整数有效,对负数不行,因为负数用的是补码,最高外符号位为1,最后右移动,肯定 ...