/// <summary>
/// 随机抽取指定人数的角色
/// </summary>
/// <param name="dwid">单位id</param>
/// <param name="jsmc">角色名称</param>
/// <param name="cqrs">抽取人数</param>
/// <returns>随机抽取的姓名标记列表</returns>
private List<string> jscq(int dwid,string jsmc,int cqrs)
{
Random sjs = new Random(DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day +
DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second +
DateTime.Now.Millisecond);
//获取定向抽取的原数据集,排除回避人员
var cx_zdcq = from aa in sjklj.员工
where aa.单位id == dwid && aa.角色名称 == jsmc &&
(aa.是否回避人员 == null || (aa.是否回避人员.HasValue && aa.是否回避人员 == false))
select aa;
int rs = cx_zdcq.Count();
HashSet<int> uniqueNumbers = new HashSet<int>();//里面的元素不能重复
while (uniqueNumbers.Count < rs)
{
int number = sjs.Next(1, 10 * rs + 1);
uniqueNumbers.Add(number);
}
int[] bcfsjs = new int[rs];//不重复随机数数组
int j = 0;
foreach (var number in uniqueNumbers)
{
bcfsjs[j] = number;
j++;
}
// 分配随机号码
int i = 1;
if (rs > 0)
{
foreach (var kk in cx_zdcq)
{
kk.随机编号 = bcfsjs[i - 1];
i++;
}
sjklj.SaveChanges();
}
//按照随机编号升序排列提取指定抽取人数
var cx_xdrsmd = (from aa in cx_zdcq
orderby aa.随机编号 ascending
select aa).Take(cqrs);
List<string> lstcq = new List<string>();
if(cx_xdrsmd.Count()==0)
{
lstcq.Add("无人");
}
else
{
foreach(var mm in cx_xdrsmd)
{
lstcq.Add(mm.姓名标记);
}
}
return lstcq;
}
|