Shuxia Ning
2024-08-28 1a8a81785470302fc7fbd6914a9df5d1094dac2a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
namespace IStation.Win
{
    public static class ClassUpdateVailDataHelper
    {
        /// <summary>
        /// 反射对比实体属性变更
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public static class CompareEntry<T>
        {
            /// <summary>
            /// 编辑之前的对象和编辑后的对象进行对比
            /// </summary>
            /// <returns></returns>
            public static bool CompareDTO(T BeforeDTO, T AfterDTO)
            {
                bool IsEqual = true;
 
                if (BeforeDTO == null || AfterDTO == null)
                {
                    IsEqual = false;
                }
                else if (BeforeDTO.Equals(DBNull.Value) || AfterDTO.Equals(DBNull.Value))
                {
                    IsEqual = false;
                }
                else if (BeforeDTO.GetType() != AfterDTO.GetType())
                {
                    IsEqual = false;
                    return IsEqual;
                }
                else if (BeforeDTO is int || BeforeDTO is short || BeforeDTO is long || BeforeDTO is float || BeforeDTO is double || BeforeDTO is decimal)
                {
                    //int 01与1      
                    if (BeforeDTO is int)
                    {
                        if (Convert.ToInt32(BeforeDTO) != Convert.ToInt32(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                    else if (BeforeDTO is short)
                    {
                        if (Convert.ToInt16(BeforeDTO) != Convert.ToInt16(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                    else if (BeforeDTO is long)
                    {
                        if (Convert.ToInt64(BeforeDTO) != Convert.ToInt64(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                    else if (BeforeDTO is float)
                    {
                        if (Convert.ToSingle(BeforeDTO) != Convert.ToSingle(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                    else if (BeforeDTO is double)
                    {
                        if (Convert.ToDouble(BeforeDTO) != Convert.ToDouble(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                    else if (BeforeDTO is decimal)
                    {
                        if (Convert.ToDecimal(BeforeDTO) == Convert.ToDecimal(AfterDTO))
                        {
                            IsEqual = false;
                        }
                    }
                }
                else
                {
                    var beforeMembers = BeforeDTO.GetType().GetProperties();
                    var afterMembers = AfterDTO.GetType().GetProperties();
                    for (int i = 0; i < beforeMembers.Length; i++)
                    {
                        var beforeVal = beforeMembers[i].GetValue(BeforeDTO, null);
                        var afterVal = afterMembers[i].GetValue(AfterDTO, null);
                        var beforeValue = beforeVal == null ? null : beforeVal.ToString();
                        var afterValue = afterVal == null ? null : afterVal.ToString();
                        if (beforeValue != afterValue)
                        {
                            IsEqual = false;
                            break;
                        }
                    }
                }
 
                return IsEqual;
            }
        }
    }
}