2010-05-24 5 views
2

Рассмотрима моего DataTable,Удаление повторяющихся значений столбцов из DataTable без использования LINQ

Id Name MobNo 
1 ac 9566643707 
2 bc 9944556612 
3 cc 9566643707 

Как удалить строку, содержащую 3 дублирует MobNo значения столбца в C# без использования LINQ. Я видел похожие вопросы по SO, но все ответы используют LINQ.

+0

Когда дубликаты найдены, как вы хотите решить, какой из них останется, и какие из них нужно удалить? –

+0

@ Томас всегда первый, кто останется ... –

+0

Вы хотите просто получить набор записей с уникальными номерами мобильных телефонов или удалить записи с дубликатами из существующего набора? – Strelok

ответ

4

Следующий метод сделал то, что я хочу ....

public DataTable RemoveDuplicateRows(DataTable dTable, string colName) 
    { 
     Hashtable hTable = new Hashtable(); 
     ArrayList duplicateList = new ArrayList(); 

     //Add list of all the unique item value to hashtable, which stores combination of key, value pair. 
     //And add duplicate item value in arraylist. 
     foreach (DataRow drow in dTable.Rows) 
     { 
      if (hTable.Contains(drow[colName])) 
       duplicateList.Add(drow); 
      else 
       hTable.Add(drow[colName], string.Empty); 
     } 

     //Removing a list of duplicate items from datatable. 
     foreach (DataRow dRow in duplicateList) 
      dTable.Rows.Remove(dRow); 

     //Datatable which contains unique records will be return as output. 
     return dTable; 
    } 
0

Возможно, вы захотите посмотреть внутреннюю работу на DISTINCT перед тем, как запустить это на вашей четкой БД (обязательно создайте резервную копию!), Но если она работает так, как я думаю, она делает (захватывая первое значение), вы должны быть способны использовать (что-то очень похожее на) следующий SQL:

DELETE FROM YourTable WHERE Id NOT IN (SELECT DISTINCT Id, MobNo FROM YourTable); 
+0

Я создаю свой datatable из файла csv ... –

+0

@Pandiya, ну почему вы так не сказали? =) –

+0

Я отправил ответ, и это сработало очень хорошо для меня ... –

1

Как вы читаете файл CSV (немного псевдокода, но вы получите картину):

List<String> uniqueMobiles = new List<String>(); 

String[] fileLines = readYourFile(); 

for (String line in fileLines) { 
    DataRow row = parseLine(line); 
    if (uniqueMobiles.Contains(row["MobNum"]) 
    { 
     continue; 
    } 
    uniqueMobiles.Add(row["MobNum"]); 
    yourDataTable.Rows.Add(row);  
} 

Это только будет загрузите записи с помощью уникальных мобильных телефонов в таблицу данных.

0

Это самый простой способ.

**

var uniqueContacts = dt.AsEnumerable() 
         .GroupBy(x=>x.Field<string>("Email")) 
         .Select(g=>g.First()); 

** Я нашел его в этой теме LINQ to remove duplicate rows from a datatable based on the value of a specific row

что на самом деле было для меня, что я вернуть его в DataTable

DataTable uniqueContacts = dt.AsEnumerable() 
          .GroupBy(x=>x.Field<string>("Email")) 
          .Select(g=>g.First()).CopyToDataTable(); 
Смежные вопросы