folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# 2 List<T> Karşılaştırma



C# 2 List<T> Karşılaştırma

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    Merhaba Arkadaşlar,

    Elimde 2 liste var. Bu listeyi karşılatırmak ve bu karşılaştırma sonucu hangi kayıtların update,create,delete olacağına karar vermek istiyorum.

    List<Address> şekilnde. Address nesnesi içeriği ID ve SourceKey var. Benim yapmak istediğim. Gelen liste ve bende ki listeyi ID ve SourceKey ile kontrol edip.

    1- Karşıdan Gelen ve Bende olanları bulup Update etmek

    2- Karşıdan Gelen ama Bende olmayanları Create etmek

    3- Karşıdan Gelen, Karşı listede olmayan ama bende olan kayıtlarıda Delete etmek.

    2 listenin karşılaştırmasıda ID ve SourceKey eşitliği ile yapılacak.


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    3. maddeyi biraz daha açıklar mısın?


    Sen hiç kaval çaldın mı?
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek
    JPriest bunu yazdı

    3. maddeyi biraz daha açıklar mısın?

    Şöyle ki hocam:

    Örneğin adam önceden 3 kayıt yollamıştı ve sisteme 3 adres kaydı almıştım. Sonrasında kendi tarafında 2 sini sildi ve bana tek bir adres yolladı. Bu durumda benim, bana yollanan listede olmayan ama bende olan kayıtları bulup kendi tarafımdan da silmem gerekiyor.


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Ben mi yanlış anlıyorum yoksa senin elindeki listenin hiçbir geçerliliği yok mu? Karşıda yoksa sildirdin, varsa eklettin, sendeki ile uyuşmadığında karşıdakini aldın. Ee sende niye liste duruyor ki?


    Olaylara karışmayın!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek
    YeniHarman bunu yazdı

    Ben mi yanlış anlıyorum yoksa senin elindeki listenin hiçbir geçerliliği yok mu? Karşıda yoksa sildirdin, varsa eklettin, sendeki ile uyuşmadığında karşıdakini aldın. Ee sende niye liste duruyor ki?

    Hocam sanırım yalnış anladınız. Bende ki liste ile gelen listeyi katşılaştırıyorum. Karşıda yoksa ve bende varsa benden siliyor, bende varsa update edior, karşıda var bende yoksa create yapıor. 


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    GodKlaus
    GodKlaus's avatar
    Kayıt Tarihi: 13/Ocak/2014
    Erkek

    3 tane fonksiyon yazsan. Elindeki listenin ID'sini aldıktan sonra gelen verideki listeyi tek tek dolaşsa ve aynı ID'ye sahip verileri update,delete,insert vs vs neyse yapsa ?

    Verimli bir çözüm değil ama günü kurtarır. İleride kalan vaktinde tekrar yaparsın birşeyler :D

     


    Telegram : @CuneytKuscu && Discord : Tyenuc#2679 | İstanbul Avr. Yazılım Mühendisi ve sonunda işim var (:
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek
    GodKlaus bunu yazdı

    3 tane fonksiyon yazsan. Elindeki listenin ID'sini aldıktan sonra gelen verideki listeyi tek tek dolaşsa ve aynı ID'ye sahip verileri update,delete,insert vs vs neyse yapsa ?

    Verimli bir çözüm değil ama günü kurtarır. İleride kalan vaktinde tekrar yaparsın birşeyler :D

     

    Hocam aslında konuda belirtmedim hala hazırda hızlıca bu şekilde yapmıştım :) Daha üst seviye çözümler çıkar vs diye düşünerek konu açayım aydınlanayım dedim. Linq vs denedim ancak pek bilmediğimden oldurmadım.

    Ek olarak sadece ID değil + SourceKey de var.


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    rakkoc
    rakkoc's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo
    Absolut bunu yazdı
    YeniHarman bunu yazdı

    Ben mi yanlış anlıyorum yoksa senin elindeki listenin hiçbir geçerliliği yok mu? Karşıda yoksa sildirdin, varsa eklettin, sendeki ile uyuşmadığında karşıdakini aldın. Ee sende niye liste duruyor ki?

    Hocam sanırım yalnış anladınız. Bende ki liste ile gelen listeyi katşılaştırıyorum. Karşıda yoksa ve bende varsa benden siliyor, bende varsa update edior, karşıda var bende yoksa create yapıor. 

    yeni sende ki liste karsidakine eşit oluyor her seferinde. yani sende ki listenin önemi yok karşidan gelen hep aktif olan ?


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek
    rakkoc bunu yazdı
    Absolut bunu yazdı
    YeniHarman bunu yazdı

    Ben mi yanlış anlıyorum yoksa senin elindeki listenin hiçbir geçerliliği yok mu? Karşıda yoksa sildirdin, varsa eklettin, sendeki ile uyuşmadığında karşıdakini aldın. Ee sende niye liste duruyor ki?

    Hocam sanırım yalnış anladınız. Bende ki liste ile gelen listeyi katşılaştırıyorum. Karşıda yoksa ve bende varsa benden siliyor, bende varsa update edior, karşıda var bende yoksa create yapıor. 

    yeni sende ki liste karsidakine eşit oluyor her seferinde. yani sende ki listenin önemi yok karşidan gelen hep aktif olan ?

    Bende ki liste karşıya eşit olmuyor sürekli. Karşıdan gelen bende ki listeden az olduğuda olabilir. Bende 7 kayıt varken karşıdan 3 geliyor olabilir.

    @Yazilimci eyw müdür aydınlatma yaşattın bu yaşımdan sonra ellerin dert görmesin.

     


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    15 dakikada yazdım, testleri yaptım işini görüyor hocam.

    List yerine Hashset kullanman performans açısından daha iyi olur etc. Kodda performans olarak hatalar var, gerekli vakit olmadığı için yaz geç yaptım umarım işini görür.

      public class Adress
            {
                public int Id { get; set; }
                public int SourceKey { get; set; }
                public string Value { get; set; }
    
                /* Silinecek kayıtları burda tutalım*/
                public bool IsDelete { get; set; } = false;
    
    
            }
    
            static void Main(string[] args)
            {
                List<Adress> localAdressList = new List<Adress>();
                localAdressList.Add(new Adress { Id = 1, SourceKey = 2, Value = "tbtbtbtbt" });
                localAdressList.Add(new Adress { Id = 2, SourceKey = 3, Value = "saybirs" });
                localAdressList.Add(new Adress { Id = 3, SourceKey = 4, Value = "çükübik" });
    
    
                List<Adress> serverAdressList = new List<Adress>();
                serverAdressList.Add(new Adress { Id = 1, SourceKey = 2, Value = "tahribat.com" });
                serverAdressList.Add(new Adress { Id = 2, SourceKey = 3, Value = "saybirs" });
                serverAdressList.Add(new Adress { Id = 3, SourceKey = 4, Value = "çükübik" });
    
    
                for (int i = 0; i < localAdressList.Count; i++)
                {
                    int rowId = localAdressList[i].Id;
                    int rowSourceKey = localAdressList[i].SourceKey;
    
                    var isCheck = serverAdressList.Find(x => x.Id == rowId && x.SourceKey == rowSourceKey);
                    if (isCheck != null)
                    {
                        //Bende de var serverda da varmış
    
    
                        //Birde güncel mi diye bakalım.
    
                        //model içerisindeki kolonları dönelim
                        foreach (var prop in localAdressList[i].GetType().GetProperties()) 
                        {
                            //Bizim modelde örnek vermek için Id ve SourceKey harici 1 tane Value kolonu var. Bunu 100 tane de olabilir. Generic olarak dönmek en mantıklısı 
                            var localPropertyName = prop.Name;
                            var localPropertyValue = prop.GetValue(localAdressList[i], null);
    
                            //O kayda ait, property value değerini bulalım
                            var serverPropertyValue = serverAdressList.Find(x => x.Id == rowId && x.SourceKey == rowSourceKey).GetType().GetProperty(localPropertyName).GetValue(serverAdressList.Find(x => x.Id == rowId && x.SourceKey == rowSourceKey), null);
    
                            if (localPropertyValue.ToString() != serverPropertyValue.ToString()) //Kolonlar arasındaki farklılıklar varmış
                            {
                                //Bu property local ve sunucuda eşleşmiyor. Sunucudaki column değerni  kendimize set edelim!
                                localAdressList[i].GetType().GetProperty(localPropertyName).SetValue(localAdressList[i], Convert.ChangeType(serverPropertyValue, localAdressList[i].GetType().GetProperty(localPropertyName).PropertyType), null);
                            }
                        }
                    }
                    else
                    {
                        //Bende varmış serverda yok, bendende silelim. IndexId'ler karışmasın diye model içerisindeki IsDelete'e set edelim for bitişinde silicez.
                        localAdressList[i].IsDelete = true;
                    }
    
                }
    
                //Silelim
                localAdressList.RemoveAll(x => x.IsDelete);
    
    
                //Bende olmayıp, serverda olan kayıtlar varmış ona da bakalım!
                if (localAdressList.Count() < serverAdressList.Count())
                {
                    for (int i = 0; i < serverAdressList.Count; i++)
                    {
                        //Bizde varmı bakalım
                        if (localAdressList.Find(x => x.Id == serverAdressList[i].Id && x.SourceKey == serverAdressList[i].SourceKey) == null)
                        {
                            //localde yok serverda varmış, local'e set edelim!
                            localAdressList.Add(serverAdressList[i]);
                        }
                    }
                }
    
    
            }



    saybirs tarafından 27/May/19 15:51 tarihinde düzenlenmiştir
Toplam Hit: 3610 Toplam Mesaj: 13
list karşılaştırma