Есть класс
class Nomenclatura
{
public int Id { get; set; }
public string Razdel { get; set; }
public string Proizvoditel { get; set; }
public string IdTovara { get; set; }
public string Nazvanie { get; set; }
public string Url { get; set; }
}
Есть два List<Nomenclatura>.
var list1 = new List<Nomenclatura>();
list1.Add(new Nomenclatura { Id = 1, IdTovara = "3" });
var list2 = new List<Nomenclatura>();
list2.Add(new Nomenclatura { Id = 2, IdTovara = "2" });
list2.Add(new Nomenclatura { Id = 1, IdTovara = "3" });
Хочу получить на выходе элементы которые есть в list2 и нет в list1. Для этого использую Except. Всё хорошо но на данный момент у меня есть сравнение только по одному свойству, а мне хочется по нескольким. Я делал так, но скорость вообще ниочём
var differences = list2.Where(l2 =>
!list1.Any(l1 => l1.Id == l2.Id&& l1.IdTovara== l2.IdTovara)).ToList();
internal class MyComparer : IEqualityComparer<Nomenclatura>
{
public bool Equals(Nomenclatura x, Nomenclatura y)
{
if (string.Equals(x.IdTovara, y.IdTovara, StringComparison.OrdinalIgnoreCase)&&
string.Equals(x.Nazvanie, y.Nazvanie, StringComparison.OrdinalIgnoreCase)&&
string.Equals(x.Proizvoditel, y.Proizvoditel, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public int GetHashCode(Nomenclatura obj)
{
return obj.IdTovara.GetHashCode() ^ obj.Nazvanie.GetHashCode() ^ obj.Proizvoditel.GetHashCode();
}
}
А вот использование его
var list1 = new List<Nomenclatura>();
list1.Add(new Nomenclatura { Id = 1, IdTovara = "3", Nazvanie = "naz", Proizvoditel = "proiz" });
var list2 = new List<Nomenclatura>();
list2.Add(new Nomenclatura { Id = 1, IdTovara = "2", Nazvanie = "naz", Proizvoditel = "proiz" });
list2.Add(new Nomenclatura { Id = 2, IdTovara = "3", Nazvanie = "naz", Proizvoditel = "proiz" });
var onlyDelhiResidents = list2.Except(list1, new MyComparer ()).ToList();
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости