且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从数据表中删除重复的***方式是什么?

更新时间:2023-01-13 13:28:10

可以使用Linq to Datasets。请查看。这样的东西:

  //填写DataSet。 
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

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

DataTable contact = ds.Tables [Contact];

//从联系人表中获取100行。
IEnumerable< DataRow> query =(from c in contact.AsEnumerable()
select c).Take(100);

DataTable contactsTableWith100Rows = query.CopyToDataTable();

//向列表中添加100行。
foreach(ContactsTableWith100Rows.Rows中的DataRow行)
rows.Add(row);

//通过向列表中添加相同的100行来创建重复的行。
foreach(ContactsTableWith100Rows.Rows中的DataRow行)
rows.Add(row);

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

//查找表中唯一的联系人。
IEnumerable< DataRow> uniqueContacts =
table.AsEnumerable()。Distinct(DataRowComparer.Default);

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


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

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.

EDIT: 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.

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"));
}