Удаление из таблицы строк найденных в списке

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 949
Благодарностей
4 367
Баллы
113
Есть такой код, который сравнивает два списка и удаляет из первой таблицы дублирующие строки из списка.
Код:
var firstList = project.Lists["friends"];
var secondList = project.Lists["users"];
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < firstList.Count; i++)
    {
        var str1 = firstList[i];
        for(int j=secondList.Count-1; j >= 0; j--)
        {
               var str2 = secondList[j];
            if (str1==str2)
            {
                secondList.RemoveAt(j);
            }     
        }     
    }
}
Но у меня таблица с несколькими колонками и мне нужно чтобы сравнивались строки из первого столбца с данными списка.
Как это сделать кодом, не приводя таблицу в список и обратно?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 040
Баллы
113
а где тут в коде таблица ???
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 949
Благодарностей
4 367
Баллы
113
Я и прошу показать как под таблицу переделать.
В общем сделал уже.
 
Последнее редактирование:

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 949
Благодарностей
4 367
Баллы
113
Переделал код выше:
Код:
var firstList = project.Tables["friends_tab"];
var secondList = project.Lists["users"];

lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < firstList.RowCount; i++)
    {
        var str1 = firstList.GetCell('A',i);
        for(int j=secondList.Count-1; j >= 0; j--)
        {
            var str2 = secondList[j];
            if (str1 == str2)
            {
                firstList.DeleteRow(i);
            }    
        }    
    }
}
Вроде все верно, но работает неправильно, удаляет лишние строки из таблицы.

Вот у меня была таблица с 2593 строками.
Список с 906 строками.
По идее из этих 906 в таблице должно быть около 850.
Удаляю кодом выше одинаковые строки.
Получаю в итоговой таблице после обработки 1296.

То есть как минимум 500 строк почему-то лишних удалил.
Что может быть не так?
 
Последнее редактирование:

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 949
Благодарностей
4 367
Баллы
113
В общем код странно работает. Если после первого прогона прогнать таблицу ещё раз, то он продолжает удалять строки по какому-то ему известному алгоритму. Хотя таблица по идее уже не содержит дубли со списком.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 949
Благодарностей
4 367
Баллы
113
Разобрался, вот рабочий код:
Код:
var firstList = project.Tables["friends_tab"];
var secondList = project.Lists["users"];
var rows = firstList.RowCount;

lock(SyncObjects.ListSyncer)
{
for(int i=0; i < secondList.Count; i++)
    {
        var str1 = secondList[i];
        for(int j=firstList.RowCount-1; j >= 0; j--)
        {
            var str2 = firstList.GetCell(0,j);
            if (str1 == str2)
            {
                firstList.DeleteRow(j);
            }     
        }     
    }
}
 
  • Спасибо
Реакции: alexis01 и Igorii

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)