什么是从数据表删除重复值的最佳方法? [英] What is the best way to remove duplicates from a datatable?

查看:113
本文介绍了什么是从数据表删除重复值的最佳方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经检查了整个网站,用Google搜索在网络上,但无法找到一个简单的解决这个问题。

I have checked the whole site and googled on the net but was unable to find a simple solution to this problem.

我有一个DataTable,其中大约有20列和10K行。我需要删除基于4键列数据表这样的重复行。不净有一个函数,做到这一点?最接近我所期待的功能是datatable.DefaultView.ToTable(真实的,要显示的列阵列),但这个函数在所有列。

I have a datatable which has about 20 columns and 10K rows. I need to remove the duplicate rows in this datatable based on 4 key columns. Doesn't .Net have a function which does this? The function closest to what I am looking for was datatable.DefaultView.ToTable(true, array of columns to display), But this function does a distinct on all the columns.

这将是巨大的,如果有人可以帮助我这个

It would be great if someone could help me with this.

编辑:我是不是在这个明确的遗憾。该数据表是由从DB读取CSV文件,而不是创造。因此,使用SQL查询是不是一种选择。

I am sorry for not being clear on this. This datatable is being created by reading a CSV file and not from a DB. So using an SQL query is not an option.

推荐答案

您可以使用LINQ到数据集。检查这个。事情是这样的:

You can use Linq to Datasets. Check this. Something like this:

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

List<DataRow> rows = new List<DataRow>();

DataTable contact = ds.Tables["Contact"];

// Get 100 rows from the Contact table.
IEnumerable<DataRow> query = (from c in contact.AsEnumerable()
                              select c).Take(100);

DataTable contactsTableWith100Rows = query.CopyToDataTable();

// Add 100 rows to the list.
foreach (DataRow row in contactsTableWith100Rows.Rows)
    rows.Add(row);

// Create duplicate rows by adding the same 100 rows to the list.
foreach (DataRow row in contactsTableWith100Rows.Rows)
    rows.Add(row);

DataTable table =
    System.Data.DataTableExtensions.CopyToDataTable<DataRow>(rows);

// Find the unique contacts in the table.
IEnumerable<DataRow> uniqueContacts =
    table.AsEnumerable().Distinct(DataRowComparer.Default);

Console.WriteLine("Unique contacts:");
foreach (DataRow uniqueContact in uniqueContacts)
{
    Console.WriteLine(uniqueContact.Field<Int32>("ContactID"));
}

这篇关于什么是从数据表删除重复值的最佳方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆