Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
tomas
Člen
Avatar
tomas:16.1.2015 13:52

Ahoj, chci se zeptat jestli existuje nějaké elegantní řešení pro porovnání dvou objektů. Mám následující datovou třídu

public partial class sp_GetDeviceDetail_Result
    {
        public int id { get; set; }
        public string inventory_number { get; set; }
        public string name { get; set; }
        public string model { get; set; }
        public string serial_number { get; set; }
        public string product_number { get; set; }
        public Nullable<double> price_purchase { get; set; }
        public string currency { get; set; }
        public string document_number { get; set; }
        public Nullable<System.DateTime> date_purchase { get; set; }
        public Nullable<System.DateTime> date_elimination { get; set; }
        public string location { get; set; }
        public string note { get; set; }
    }

Mám dvě instance tohoto objektu, jedna je poslaná ze stránek a druhá je načtená z DB. Já potřebuji porovnat jejich hodnoty tak, abych rozpoznal, jestli došlo ke změně dat ve formuláři. Napadá mě projít smyčkou položku po položce a porovnat každou vlastnost samostatně, ale nezdá se mě to jako správný postup. Hlavně si myslím, že existuje elegantnější řešení a hlavně rychlejší. Můžete poradit? Je to webová aplikace Web form a používám c#. Děkuji.

 
Odpovědět
16.1.2015 13:52
Avatar
Daziko
Člen
Avatar
Odpovídá na tomas
Daziko:16.1.2015 14:47

Skus pouzit genericke rozhranie IComparable.

public class sp_GetDeviceDetail_Result : IComparable<sp_GetDeviceDetail_Result>
   {
       public int id { get; set; }
       public string inventory_number { get; set; }
       public string name { get; set; }
       public string model { get; set; }
       public string serial_number { get; set; }
       public string product_number { get; set; }
       public Nullable<double> price_purchase { get; set; }
       public string currency { get; set; }
       public string document_number { get; set; }
       public Nullable<System.DateTime> date_purchase { get; set; }
       public Nullable<System.DateTime> date_elimination { get; set; }
       public string location { get; set; }
       public string note { get; set; }

       public int CompareTo(sp_GetDeviceDetail_Result other)
       {
           if (id != other.id || inventory_number != other.inventory_number)
           {
               return 1;
           }
           else
           {
               return 0;
           }
       }
   }

ukazka ako pracuje :

static void Main(string[] args)
        {
            sp_GetDeviceDetail_Result result1 = new sp_GetDeviceDetail_Result(); // obj from db
            sp_GetDeviceDetail_Result result2 = new sp_GetDeviceDetail_Result(); // obj from page

            //result2.id = 25;

            int changed = result1.CompareTo(result2);

            if (changed == 1)
            {
                Console.WriteLine("something changed");
            }
            else
            {
                Console.WriteLine("object are equale");
            }

            Console.Read();
        }
 
Nahoru Odpovědět
16.1.2015 14:47
Avatar
Daziko
Člen
Avatar
Odpovídá na tomas
Daziko:16.1.2015 14:59

Alebo pouzi genericke rozhranie IEquatable. Priklad najdes tu

http://stackoverflow.com/questions/10454519/best-way-to-compare-two-complex-object
 
Nahoru Odpovědět
16.1.2015 14:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.