【发布时间】:2016-11-29 21:48:13
【问题描述】:
我正在尝试从 DataTable 随机获取记录,但有一定限制。我可以按如下方式随机获取数据 -
var r = new Random();
var _randomSelection = dt.Rows.OfType<DataRow>().OrderBy(rand => r.Next()).Take(limit);
但这些值似乎是多余的。我想获得独特的价值。到目前为止,我已经尝试过 Distinct() 作为 -
var _randomSelection = dt.Rows.OfType<DataRow>().OrderBy(rand => r.Next()).Take(limit).Distinct();
但这似乎没有解决。任何人都可以请指导哪里出了问题。谢谢。
【问题讨论】:
-
先定义唯一,哪一列指定记录的键?目前
Distinct只能比较不同的DataRow 引用。 -
您还应该更改顺序,首先使用
Distinct(),然后使用Take,否则您通常会获得比请求更少的数据 -
@TimSchmelter 正在获取“id”列的记录。我在 SSMS 中测试了我的查询,它获取了唯一的记录。但似乎与随机函数有关。这就是我得到重复值的原因
-
@Adassko 尝试更改顺序但仍然没有运气:(。值仍然是多余的。
-
如果
dt.Rows包含唯一记录,您的随机排序永远不会导致重复!您应该更具体地说明您期望的输出和实际得到的输出; 似乎没有解决太模糊了。
标签: c# winforms linq random datatable