从数据表中随机选择一条记录

pick a random records from a datatable

我正在尝试创建一个导入 excel 文件并从中读取数据的应用程序,它 returns n 随机记录为获胜者根据用户希望从该列表中获得多少获胜者。所以我从 excel 文件中读取数据并将其分配给名为 dtdatatable。这是一个小概述

那是 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();
}

希望这对您有所帮助...