【问题标题】:Checking a DataTable Column for Uniqueness检查 DataTable 列的唯一性
【发布时间】:2018-02-14 14:39:59
【问题描述】:

下面这个方法判断DataTable中的列是否看起来很慢。是否有任何建议可以更快地检查特定列的唯一性,也许不必创建单独的视图?

var view = new DataView(LoadedDataTable);
var distinctValues = view.ToTable(true, ColID);
if (distinctValues.Rows.Count != LoadedDataTable.Rows.Count)
    Messagebox.Show("Column " + ColID + " is not unique.");

更新

需要注意的一点是,我不关心是否找到重复项,只关心列是否唯一。 IE。如果它发现重复,它可能会停止搜索。如果这有什么不同!

【问题讨论】:

  • 您可以按照建议尝试 LINQ,但从您的代码来看,您可能只是在处理大量需要时间来处理的数据。 ToTable(bool, string) 也可能需要时间,这就是为什么我不建议只将视图投射到两个单列表(一个非唯一)并测试两个表本身是否相等。
  • @CDove 我很欣赏您的建议,很可能是表列的大小明智地延迟了ToTable()。我觉得下面布莱克的回答基本上是按照你的建议做的,使用 Linq 自己处理单个列。

标签: c# datatable


【解决方案1】:

对我来说,一个快速的时间测试发现这个解决方案比使用表中大约 15000 行的 DataView 和 ToTable 快得多(大约 10 毫秒对 1000 毫秒)。

var values = LoadedDataTable.Rows.Cast<DataRow>()
    .Select(r => r[ColID])
    .Distinct()
    .ToList();
var unique = values.Count == LoadedDataTable.Rows.Count;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多