Sayfalar

10 Temmuz 2019 Çarşamba

İki kompleks nesne listesinin lambda kullanılarak karşılaştırılması

2 farklı kompleks tipte objeler içeren 2 farklı listeyi birbiriyle karşılaştırabilmek için halihazırda bir yöntem bulunmamaktadır. Bunu yapabilmek için kendi karşılaştırıcılarınızı implement etmeniz gerekir. Ancak bunu lambda operatörü ile yapabilmek için basit bir yöntem var.

Örneğin Car ve CarDto tipleriniz var ve bunların üzerinde farklı alanlar var ancak karşılaştırılabilir olsunlar. Yapacağınız tek şey bu karşılaştırılacak alanlarda değişim olup olmadığını dönen bir fonksiyonu nesnelerden birinin üzerine yazmak.

public class Car
{
    public Guid Id { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
    public string Text { get; set; }
    
    public bool HasChange(CarDto dto) =>
        $"{this.Model} ({this.Year})" != dto.ModelAndYear ||
        this.Text != dto.Text;
}

public class CarDto
{
    public Guid? Id { get; set; }
    public string ModelAndYear { get; set; }
    public string Text { get; set; }
}

Bu tanımlardan sonra aşağıdaki yöntem ile listede değişim var mı yok mu bulabiliyoruz:

public bool HasChanged(IList<CarDto> list1, IList<Car> list2) => 
    list1.Count != list2.Count || list1.Any(x => { 
        var o = list2.SingleOrDefault(e => e.Id == x.Id.GetValueOrDefault()); 
        return o == null || o.HasChange(x);
    });



Hiç yorum yok:

Yorum Gönder