Сравнение 2 списков из разных источников на C#

#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) ) должны быть равны нулю. (Это означает, что никакие элементы не были добавлены и никакие элементы не были удалены).