我正在尝试创建一个导入excel文件并从中读取数据的应用程序,它根据用户想要从该列表中获得多少获胜者随机返回 n 记录作为获胜者。所以我从excel文件中读取数据并将其分配给名为datatable
的{{1}}。这是一个小概述
表示excel中将导入dt
的前30条记录。现在,如果10中的用户密钥(即获胜者总数),我需要从这个dt
中挑选10个“RANDOMLY”获胜者,但正如您所看到的那样,其中一些是重复的,例如:在D栏中,名为“H”的条目有6行。现在,如果应用程序选择其中一个,则必须删除其他“H”,但这是在它被选中之后。在选择任何副本之前删除重复项,将降低他们赢得更好奖品的机会。
答案 0 :(得分:1)
你可以尝试一下吗,
dt2 = dt.Clone();
dt.AsEnumerable().Select(x => x["IC_NUMBER"].ToString()).Distinct().ToList().ForEach(x =>
{
DataRow[] dr = dt.Select("IC_NUMBER = '" + x + "'");
dt2.ImportRow(dr[0]);
dr.ToList().ForEach(y => dt.Rows.Remove(y));
dt.AcceptChanges();
});
编辑:
int totalWinners = 10;
Random rnd = new Random();
dt2 = dt.Clone();
for (int i = 1; i <= totalWinners; i++)
{
//Pick random datarow
DataRow selectedWinner = dt.Rows[rnd.Next(0, dt.Rows.Count - 1)];
//Insert it in the second table
dt2.ImportRow(selectedWinner);
//Retrieve other datarows that have same 'IC NUMBER'
var rows = dt.AsEnumerable().Where(x => x["IC NUMBER"].ToString() ==
selectedWinner["IC NUMBER"].ToString());
//Delete all the rows with the selected IC NUMBER in the first table
rows.ToList().ForEach(y => dt.Rows.Remove(y));
dt.AcceptChanges();
}
希望这会有所帮助......