лучший способ сравнить различия между списками - PullRequest
2 голосов
/ 17 февраля 2011

У меня есть два набора списков ниже:

Информация о списке 1
ID = 1
PersonFirstName = Sarah
PersonLastName = Smith
PersonFavoriteFood = Pizza
PersonFavoriteColor = PurplePersonFavoriteFlower = Lily

Список 2 Инфо
ID = 1
PersonFirstName = Sarah
PersonLastName = Smith
PersonFavoriteFood = Гамбургер
PersonFavoriteColor = Желтый
PersonFavoriteFlower = Роза

Как видите, Сара Смит пришла в какую-то систему и изменила свою любимую еду, любимый цвет и любимый цветок.Если ее менеджер зайдет в это приложение и откроет его, он увидит три строки в истории записи Сары Смит:

Дата изменения = 2/16
Поле изменения = PersonFavoriteFood
Исходное значение= Пицца
Измененное значение = Гамбургер
Изменено = Сара Смит

Дата изменения = 2/16
Поле изменено = PersonFavoriteColor
Исходное значение = Фиолетовый
Измененное значение = Желтый
Изменено = Сара Смит

Дата изменена = 2/16
Поле изменено = PersonFavoriteFlower
Исходное значение = Лилия
Изменено значение = Роуз
Изменено = Сара Сара Смит

Три строки, которые он видит, должны быть сохранены в базе данных таким образом.Таким образом, это одна таблица с двумя строками (исходная строка и измененная строка) и другая таблица с таким количеством строк, сколько было изменений и каковы были эти изменения (еда, цвет, цветок).Я легко могу получить первую таблицу с оригинальной и измененной строкой.Мне не нравится мой код VB.NET, проходящий через LINQ в этих двух списках (исходный и измененный).Моя мысль состоит в том, чтобы выбрать значение из каждого столбца в каждом списке, определить, отличается ли оно, затем сохранить его в другой таблице, если нет, затем получить следующий столбец из каждого списка и сравнить.Но есть ли более простой способ?

Мой код ссылки:

Dim columnvalue1 = from a in OriginalList select a.column1
Dim columnvalue2 = from b in ChangedList select a.column1

If columnvalue1 = columnvalue2 then
SaveDifferencesToTable(colomnvalue1, columnvalue2)
End If

Если есть лучший способ, даже если он находится за пределами LINQ, пожалуйста, дайте мне знать.Я могу сделать это таким образом, но я волнуюсь, что это неправильный способ сделать это.Я также использую Entity Framework.

1 Ответ

0 голосов
/ 17 февраля 2011

Вы можете использовать метод Enumerable.Except для создания набора различий. Вы также можете реализовать свой собственный компаратор, если это необходимо. В любом случае, я уверен, что вам придется написать код.

Вот более подробная информация о методе:

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...