Удалить повторяющиеся значения столбцов из таблицы данных без использования LINQ - PullRequest
2 голосов
/ 24 мая 2010

Считайте, что у меня есть данные,

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

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

Ответы [ 5 ]

4 голосов
/ 24 мая 2010

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

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;
    }
1 голос
/ 24 мая 2010

Когда вы читаете ваш 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 голосов
/ 18 марта 2015

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

**

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

** Я нашел это в этой теме LINQ для удаления повторяющихся строк из таблицы данных на основе значения конкретной строки

что на самом деле было для меня, что я возвращаю его как датированный

DataTable uniqueContacts = dt.AsEnumerable()
                           .GroupBy(x=>x.Field<string>("Email"))
                           .Select(g=>g.First()).CopyToDataTable();
0 голосов
/ 24 мая 2010

Вы можете использовать "IEqualityComparer" в C #

0 голосов
/ 24 мая 2010

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

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