从数据表中随机选择一条记录
pick a random records from a datatable
我正在尝试创建一个导入 excel 文件并从中读取数据的应用程序,它 returns n 随机记录为获胜者根据用户希望从该列表中获得多少获胜者。所以我从 excel 文件中读取数据并将其分配给名为 dt
的 datatable
。这是一个小概述
那是 excel 中的前 30 条记录,它们将被导入到 dt
。现在,如果用户输入 10(即获胜者总数),我需要从这个 dt
中选出 10 个获胜者 "RANDOMLY",但正如您所看到的,其中一些是重复的,例如:在 D 列中,名为 "H" 的条目有 6 行。现在,如果应用程序选择了其中的 1 个,则必须删除其他 "H",但那是在选择之后。在选择其中任何一个之前删除重复项,将降低他们赢得更好奖品的机会。
你能试试,
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();
}
希望这对您有所帮助...
我正在尝试创建一个导入 excel 文件并从中读取数据的应用程序,它 returns n 随机记录为获胜者根据用户希望从该列表中获得多少获胜者。所以我从 excel 文件中读取数据并将其分配给名为 dt
的 datatable
。这是一个小概述
那是 excel 中的前 30 条记录,它们将被导入到 dt
。现在,如果用户输入 10(即获胜者总数),我需要从这个 dt
中选出 10 个获胜者 "RANDOMLY",但正如您所看到的,其中一些是重复的,例如:在 D 列中,名为 "H" 的条目有 6 行。现在,如果应用程序选择了其中的 1 个,则必须删除其他 "H",但那是在选择之后。在选择其中任何一个之前删除重复项,将降低他们赢得更好奖品的机会。
你能试试,
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();
}
希望这对您有所帮助...