C# 检查DataTable列的唯一性

C# 检查DataTable列的唯一性,c#,datatable,C#,Datatable,下面的方法用于确定DataTable中的列是否非常慢。是否有任何建议可以更快地检查特定列的唯一性,而不必创建单独的视图 var view = new DataView(LoadedDataTable); var distinctValues = view.ToTable(true, ColID); if (distinctValues.Rows.Count != LoadedDataTable.Rows.Count) Messagebox.Show("Column " + ColID +

下面的方法用于确定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.");
更新


值得注意的一点是,我不在乎找到重复项,只在乎列是否唯一。也就是说,如果它发现了重复项,它可能会停止搜索。如果这有什么区别的话

对于我来说,一个快速时间测试使这个解决方案比使用DataView和ToTable(表中约15000行)要快得多(约10 ms vs 1000 ms)

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

您可以按照建议尝试LINQ,但从您的代码判断,您可能只是在处理大量需要时间的数据。ToTable(bool,string)也可能需要时间,这就是为什么我不建议将视图强制转换为两个单列表(一个非唯一)并测试这两个表本身是否相等。@CDove我感谢您的建议,可能是表列的大小延迟了
ToTable()
。我觉得Blake下面的回答基本上是按照您的建议,使用Linq自己处理单个列。