Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260

Неправильно возвращает List

18.07.2014, 16:19. Показов 1393. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите разобраться.
Вкратце: пишу прогу которая читает значения и пишет их в лист, после чего должна записать их в БД. Нужно периодически считывать данные и только новые данные (т.е. те которые поменялись) записывать в в БД.
Создал два листа. Один в котором последние считанные значения , а другой в который загружаются новые данные.
Хочу их сравнить. Делаю вот так:

C#
1
2
3
public List<CSV> ActualList = new List<CSV>();
public List<CSV> values = new List<CSV>();
var a = values.Except(ActualList);
Естественно они почти идентичные. Сделал так чтобы ActualList отличался от values на 3 значения.
После отладки в переменной a во вкладке IEnumerable находятся те же значения что и в values. А список по идее должен содержать как раз те три значения которые отличаются.
Замечу, что в классе CSV есть три поля. И эти два листа имеют различия только в одном из полей.
Как быть? Как сделать список, в котором будут только те элементы списка value которых нету в ActualList?
Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2014, 16:19
Ответы с готовыми решениями:

Неправильно работает List<T>.FindAll
List&lt;Manufactory&gt; listFind = new List&lt;Manufactory&gt;(); listFind = list.FindAll(delegate(Manufactory m) { return...

Метод не возвращает коллекцию List
Доброе время суток. Помогите пожалуйста. Проблема метод не возвращает коллекцию List пример using System; using...

Метод возвращает неправильно расстояние от отрезка до точки
В частности при A(-30;0), B(30;0), K(60;30) правильный ответ 42,4264068711929. Я вычисляю, с расчерчивание в тетради и получается 30....

12
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 16:45
Не дочитал до конца, но по сабжу, как насчёт сделать переменную

C#
1
int Counter=0;
И при первом добавлении в базу записать
C#
1
 Counter = ActualList.Count;
А в следующий раз добавлять в базу только значения начиная с Counter до ActualList.Count.
А определять, что список обновился (если другого способа не предусмотрено) через сравнение
C#
1
if (ActualList.Count>Counter) {...}
0
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
18.07.2014, 16:46  [ТС]
считвание идёт из CSV файла который считывается также строками. а если в нем будут разные строчки отличаться например 3-я и 22-я.? я всё равно буду записывать в базу весь список. а мне нужно только те значения, которые изменились. Или я что то понял не так, простите.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.07.2014, 17:03
Цитата Сообщение от romasimeiz Посмотреть сообщение
Сделал так чтобы ActualList отличался от values на 3 значения
этот момент больше всего сомнений вызывает. ну и на класс(структуру) CSV посмотреть бы.
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 17:07
Лучший ответ Сообщение было отмечено romasimeiz как решение

Решение

Я понял что у вас дописывается в List постоянно новые значения и их надо добавлять..

Далее, если у вас количество данных в файле всё время одинаковое, а меняются только сами строки, то

C#
1
2
3
4
5
6
7
for(int i =0; i<ActualList.count; i++)
{
     if(String.Compare(ActualList[i], values[i] )!=0)
     {
           //добавить в базу
     }
}
0
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
18.07.2014, 17:11  [ТС]
Список каждый раз загружается новый, и он возможно на пару строчек будет отличаться от последнего и надо понять в чём различия их и эти различия записать.
сделал в конце концов вот так:

C#
1
2
3
4
5
6
for (int i=0; i<ActualList.Count; i++)
            { if ((ActualList[i].index != values[i].index)||(ActualList[i].type!=values[i].type)||(ActualList[i].values!=values[i].values))
              {
                ListToDb.Add(values[i]);                        
              }
            }
Не знаю, надёжно ли?
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 17:12
Цитата Сообщение от romasimeiz Посмотреть сообщение
Не знаю, надёжно ли?
Не знаю. Если количество элементов изменится в меньшую сторону у другого списка то выкинет exception.
Если у вас там ТОЛЬКО string в файлах, то можно мой вариант поставить. Тут прочтите про методы сравнения строк, там есть нюансы.
0
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
18.07.2014, 17:16  [ТС]
Да. действительно...


поэтому хотел использовать Exept
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 17:20
Лучший ответ Сообщение было отмечено romasimeiz как решение

Решение

Цитата Сообщение от romasimeiz Посмотреть сообщение
чей count больше и использовать его.
тогда как раз и выкинет исключение, ибо у списка из 9 элементов не будет 10 элемента. Тогда уже брать минимальный список. А если 10 элемент появился впервые то автоматом добавить его в базу. он же новый.
1
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
18.07.2014, 17:22  [ТС]
Добавлено через 2 минуты
fidgi, Да, пожалуй так и сделаю. А как проверить что
Цитата Сообщение от fidgi Посмотреть сообщение
А если 10 элемент появился впервые то автоматом добавить его в базу. он же новый.
А как это реализовать?
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 17:24
Цитата Сообщение от romasimeiz Посмотреть сообщение
А как это реализовать?
C#
1
2
3
4
if(новыйсписок.count>предыдущийсписок.count)
{
     DB.add(новыйсписок[новыйсписок.count-1])
}
1
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
18.07.2014, 17:27  [ТС]
Спасибо за помощь!
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 17:29
Не за что
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2014, 17:29
Помогаю со студенческими работами здесь

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например, myList. Сейчас я могу с помощью...

Linq преобразование List<List<double>> в List<Array>
Доброго времени суток, данный код нужно преобразовать linq выражениями и дописать выборку из List&lt;List&lt;double&gt;&gt;. Таким...

Как узнать размерность внутреннего вектора в массиве List<List<Double>>?
Добрый вечер! Уважаемые, подскажите пожалуйста, как узнать размерность внутренних строк в двумерном массиве типа List? Создаю...

Необходимо создать dll в которой буду обрабатывать list<list<string>>
Необходимо создать dll в которой буду обрабатывать list&lt;list&lt;string&gt;&gt; как объявить методы класса чтобы я задавал на вход экземпляр...

Найти минимальный элемент List<List<int?>>, не используя циклов
Имеется List&lt;List&lt;int?&gt;&gt; matrix = new List&lt;List&lt;int?&gt;&gt;(); список. Есть ли возможность найти минимальный элемент из всей этой матрицы без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru