Сравните два списка из двух атрибутов и добавьте различия в третий список C# - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно сравнить два списка, используя два параметра класса (того же класса) и добавить разницу в третий класс. Except() не подходит для моей ситуации.

Я думаю о чем-то подобном, сравнивая XXX с YYY из другого списка:

var newList = List1.Select(x => x.XXX && x.YYY)
      .Except(List2.Select(x => x.XXX && x.YYY));

спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Ваш текущий способ может получить только другие данные, которые существуют в List1, но не в List2.

Чтобы получить все их различные данные, вам также нужно reverse except и объединить их с помощью Union.

Вот мой класс Продукт:

public class Product
        {
            public int Id { get; set; }  
            public string Title { get; set; }
            public string Description { get; set; }
        }

Здесь это код:

  List<Product> List1 = new List<Product>()
        {
            new Product(){   Id =1, Title="aaa", Description="cccccccc" },
             new Product(){  Id =2,Title="bbb", Description="cccccccc" },
              new Product(){  Id =3, Title="ccc", Description="cccccccc"  },
        };
        List<Product> List2 = new List<Product>()
        {
            new Product(){  Id =1, Title="aaa" , Description ="csdfsdf"},
             new Product(){  Id =4, Title="bbb" , Description ="cccccccccc"},
        };
        var newList= (List1.Select(x => new { x.Id, x.Title }).Except(List2.Select(x => new { x.Id, x.Title })).
            Union(List2.Select(x => new { x.Id, x.Title }).Except(List1.Select(x => new { x.Id, x.Title })))).ToList();

Вот процесс тестирования:

enter image description here

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