Проверка несоответствия между двумя списками классов - PullRequest
0 голосов
/ 23 января 2019

У меня есть два списка объектов различного типа с некоторыми похожими полями.

List<BMS_ROAD_INV> List1 = bmsContext.BMS_ROAD_INV.ToList();
List<RoadInventory> List2 = context.RoadInventories.ToList();

Я должен проверить, совпадают ли аналогичные поля в List1 с аналогичными полями в List2.Если есть различия, я хочу обновить это поле в List1.Какой самый эффективный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Если необходимо сопоставить аналогичные поля, вы можете использовать Intersect, как показано ниже:

List<BMS_ROAD_INV> list1 = bmsContext.BMS_ROAD_INV.ToList();
List<RoadInventory> List2 = context.RoadInventories.ToList();

var commonUsers = list1.Select(a => a.Field1).Intersect(list2.Select(b => b.Field1));

Если Field1 является классом, то необходимо реализовать интерфейс IEquatable. или вы можете использовать перегрузку Intersect, которая принимает пользовательские IEqualityComparer

Еще один способ поиска общих данных:

var commonData = (from objA in list1
               join objB in list2 on objA.Field1 equals objB.Field2
               select objA/*or objB*/).ToList();
0 голосов
/ 23 января 2019

Вы можете сделать это следующим образом

var list3 = List2.Except(List1);

Это добавит объекты, которых нет в списке List1 из списка List2, и сохранит их в переменной list3.

Затем вы сможете обновитьиспользуя List1,

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