2015-12-17 3 views
1

У меня возникла проблема с моим кодом на C#; он создает повторяющиеся строки в моей таблице данных, но не в моей базе данных. Я не могу для жизни меня найти, что вызывает его, поэтому я попытался создать работу, как бы то ни было, похоже, не работает. Любая помощь будет оценена по достоинству.C# удаление повторяющихся строк из таблицы данных

for (int i = 0; i < ds.Tables[0].Rows.Count; i ++) 
{ 

    for(int n = 0; n< ds.Tables[0].Rows.Count; n++) 
    { 
     if (n == i) 
     { 
      //do nothing 

     } 
     else 
     { 
      if (ds.Tables[0].Rows[i] == ds.Tables[0].Rows[n]) 
      { 
       ds.Tables[0].Rows[n].Delete(); 

      } 
     } 

    } 
} 
+4

Вы определенно должны тратить свое время на выяснение того, что корень проблемы есть вместо фиксации симптомов –

+0

Перед установкой записи в таблицу данных, убедитесь, что он не уже существовать. Как вы обнаружили, что дубликаты попадали в таблицу данных, когда они не попадают в базу данных? –

+1

Прошли ли вы через код по строчке, чтобы попытаться найти проблему? – Code

ответ

2

Я полагаю, ваш вопрос связан с равенством компаратора попытки к карте DataRow (трудно hanlde как есть) на более простой классе POCO (малый класс, используемый только модель данных объявлений.

Затем используйте группу, или различны для фильтрации данных

Вот небольшой пример:.

класс ПОКО

public class DataRowModel 
    { 
     public object FirstCellData { get; set; } 
     public object SecondCellData { get; set; } 
     //... for every column in DataRow 
     public object LastCellData { get; set; } 

     public DataRowModel (DataRow row) 
     { 
      this.FirstCellData = row["FIELD_1"] ; 
      this.SecondCellData = row["FIELD_2"]; 
      this.LastCellData = row["FIELD_3"]; 
     } 
    } 

Код для достижения уникальных строк:

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

     foreach (DataRow row in ds.Tables[0].Rows) 
      rows.Add(new DataRowModel (row)); 

     List<DataRowModel> uniqueRows = new List<DataRowModel>(); 
     foreach (var groupedRow in rows.GroupBy(x => new { x.FirstCellData, x.SecondCellData, /*.. for each cell..*/ x.LastCellData })) 
      uniqueRows.Add(groupedRow.First()); 
Смежные вопросы