Задать вопрос
Radzhab
@Radzhab

Как сравнить два List?

Есть класс
public class DB
{
    public string vopros { get; set; }
    public string otvet { get; set; }
    public string url { get; set; }
}


Есть два list
List<DB> list1 = new List<DB>();
List<DB> list2 = new List<DB>();

Как сравнить эти два list? чтобы например в list3 были те элементы которые есть в первом и нет во втором? Сравнивать надо по полю vopros.
  • Вопрос задан
  • 1822 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Gorily
@Gorily
Я бы сделал как-то так:
private static void Main()
        {
            var list1 = new List<DB>
            {
                new DB {vopros = "1", url = "11"},
                new DB {vopros = "2", url = "22"},
                new DB {vopros = "3", url = "33"}
            };
            var list2 = new List<DB>
            {
                new DB {vopros = "2", url = "66"},
                new DB {vopros = "3", url = "55"},
                new DB {vopros = "5", url = "44"}
            };

            var except = list1.Except(list2, new DBComparer());
            var except1 = list2.Except(list1, new DBComparer());
        }

        public class DB
        {
            public string vopros { get; set; }
            public string otvet { get; set; }
            public string url { get; set; }
        }

        public class DBComparer : IEqualityComparer<DB>
        {

            public bool Equals(DB x, DB y)
            {
                if (ReferenceEquals(x, y)) return true;
                return x != null && y != null && x.vopros.Equals(y.vopros);
            }

            public int GetHashCode(DB obj)
            {
                return obj.vopros == null ? 0 : obj.vopros.GetHashCode();
            }
        }
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Если забыть про производительность то
foreach(var item in list1)
{
if(list2.Where(c=>c.vopros == item.vopros).Count()==0)
{
list3.Add(item);
}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Используйте Where:
var list3 = list1.Where(i => !list2.Contains(i.vopros)).ToList();

Или Except, если второй список вообще не содержит искомых объектов:
var list3 = list1.Except(list2).ToList();
В классе переопределите Equals и GetHashCode, чтобы не обязательно реализовывать компарер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы