#c# #linq
#c# #linq
Вопрос:
Моя программа представляет собой программу синхронизации, которая синхронизирует данные из источника A в источник B каждые 2 минуты — в настоящее время она добавляет новые строки независимо, но, очевидно, это не идеально для производственной среды, поэтому я хочу иметь возможность проверить, идентичны ли строки в источнике A строкам в источнике B (из самой последней синхронизации). Если это так, не выполняйте эту синхронизацию в этот раз.
Итак, я определил структуру, которая содержит все сохраненные поля (за исключением любых полей PK, которые не будут совпадать между источниками), и когда выполняется синхронизация, вместо прямой синхронизации с источником B, я создаю список структуры и помещаю туда результаты. Затем я создаю новый экземпляр списка этой структуры и помещаю туда самые последние результаты синхронизации из источника B.
Итак, теоретически, если с момента последней синхронизации ничего не изменилось, то 2 списка должны быть идентичными, за исключением порядка. Но как бы мне сравнить эти два списка?
Комментарии:
1. Что делает объекты одинаковыми. Должны ли они быть одним и тем же объектом в памяти или это зависит от содержимого?
2. определяете ли вы класс объектов в списках?
3. Извините, содержимое. Фактический объект будет другим, но содержимое будет точно таким же
4. Насколько велики эти два списка, и можете ли вы отсортировать их по чему-либо, что заставило бы их выстроиться в ряд, если бы вы разместили их рядом друг с другом на вашем экране?
5. Списки будут относительно короткими — я бы предположил, что максимум около 100, часто намного меньше. Для каждой строки, которую я переношу, есть уникальный идентификатор, и он передается в источник B — так что я мог бы сделать заказ на этом
Ответ №1:
Мне не ясно, в чем именно заключается вопрос.
Однако, если вам нужно работать со списками независимо от порядка, вы можете использовать операции на основе наборов из Enumerable
. Если у вас есть коллекции old
и new
, вы можете получить список элементов, которые находятся в новой коллекции, но не в исходной, используя new.Except(old)
(см. документацию MSDN для Except за исключением).
Если вы хотите проверить, содержат ли две коллекции абсолютно одинаковые элементы, то размеры двух наборов различий ( old.Except(new)
и new.Except(old)
) должны быть равны нулю. (Это означает, что никакие элементы не были добавлены и никакие элементы не были удалены).