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;
|
}
|
}
|
}
|
}
|