CNAS取数仪器端升级
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

pirms 4 mēnešiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Xml;
  8. using System.Xml.Serialization;
  9. namespace CnasSynchronousCommon
  10. {
  11. public class CompareObjectOperation
  12. {
  13. #region 引用对象比较
  14. /// <summary>
  15. /// 引用对象比较
  16. /// </summary>
  17. /// <param name="objA"></param>
  18. /// <param name="objB"></param>
  19. /// <returns></returns>
  20. public static bool CompareObject(object objA, object objB)
  21. {
  22. bool flag = false;
  23. if (objA == null || objB == null)
  24. {
  25. flag = false;
  26. }
  27. else if (objA == DBNull.Value && objB != DBNull.Value)
  28. {
  29. flag = false;
  30. }
  31. else if (objA != DBNull.Value && objB == DBNull.Value)
  32. {
  33. flag = false;
  34. }
  35. else if (objA == DBNull.Value && objB == DBNull.Value)
  36. {
  37. //objA objB 对应的列类型已经比较过 类型已判断 值一致
  38. flag = true;
  39. }
  40. else if (objA.GetType() != objB.GetType())
  41. {
  42. flag = false;
  43. }
  44. else if (objA is int || objA is short || objA is long || objA is float || objA is double || objA is decimal)
  45. {
  46. //int 01与1
  47. if (objA is int)
  48. {
  49. if ((int)objA == (int)objB)
  50. {
  51. flag = true;
  52. }
  53. }
  54. else if (objA is short)
  55. {
  56. if ((short)objA == (short)objB)
  57. {
  58. flag = true;
  59. }
  60. }
  61. else if (objA is long)
  62. {
  63. if ((long)objA == (long)objB)
  64. {
  65. flag = true;
  66. }
  67. }
  68. else if (objA is float)
  69. {
  70. if ((float)objA == (float)objB)
  71. {
  72. flag = true;
  73. }
  74. }
  75. else if (objA is double)
  76. {
  77. if ((double)objA == (double)objB)
  78. {
  79. flag = true;
  80. }
  81. }
  82. else if (objA is decimal)
  83. {
  84. if ((decimal)objA == (decimal)objB)
  85. {
  86. flag = true;
  87. }
  88. }
  89. }
  90. else
  91. {
  92. string strA = ToXMLString(objA);
  93. string strB = ToXMLString(objB);
  94. if (strA == strB)
  95. {
  96. flag = true;
  97. }
  98. }
  99. return flag;
  100. }
  101. #endregion
  102. public static string ToXMLString(object entity)
  103. {
  104. using (MemoryStream stream = new MemoryStream())
  105. {
  106. XmlTextWriter writer = new XmlTextWriter(stream, null);
  107. XmlSerializer xml = new XmlSerializer(entity.GetType());
  108. xml.Serialize(writer, entity);
  109. writer.Formatting = Formatting.Indented;
  110. using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8))
  111. {
  112. stream.Position = 0;
  113. string xmlString = sr.ReadToEnd();
  114. sr.Close();
  115. stream.Close();
  116. return xmlString;
  117. }
  118. }
  119. }
  120. /// <summary>
  121. /// dataRow比较
  122. /// </summary>
  123. /// <param name="drA"></param>
  124. /// <param name="drB"></param>
  125. /// <param name="columnNames">需要比较的列名称</param>
  126. /// <returns></returns>
  127. public static bool DataRowCompare(DataRow drA, DataRow drB, List<string> columnNames)
  128. {
  129. bool flag = true;
  130. //DataRow 中需要比较的列排序
  131. ColumnSort(drA, columnNames);
  132. ColumnSort(drB, columnNames);
  133. foreach (DataColumn dcA in drA.Table.Columns)
  134. {
  135. if (columnNames.Contains(dcA.ColumnName)|| columnNames.Contains(dcA.ColumnName.ToUpper())||columnNames.Contains(dcA.ColumnName.ToLower()))
  136. {
  137. foreach (DataColumn dcB in drB.Table.Columns)
  138. {
  139. if (columnNames.Contains(dcB.ColumnName)|| columnNames.Contains(dcB.ColumnName.ToUpper())||columnNames.Contains(dcB.ColumnName.ToLower()))
  140. {
  141. if (dcB.ColumnName.ToUpper() == dcA.ColumnName.ToUpper())//列名比较
  142. {
  143. //类型比较
  144. if (dcB.DataType != dcA.DataType)
  145. {
  146. flag = false;
  147. break;
  148. }
  149. //值比较
  150. else if (!CompareObject(drA[dcB.ColumnName], drB[dcB.ColumnName]))
  151. {
  152. flag = false;
  153. break;
  154. }
  155. }
  156. }
  157. }
  158. }
  159. }
  160. return flag;
  161. }
  162. /// <summary>
  163. /// 按照数组中列名顺序排序
  164. /// </summary>
  165. /// <param name="drA"></param>
  166. /// <param name="columnNames">按照数组中列名顺序排序</param>
  167. public static void ColumnSort(DataRow drA, List<string> columnNames)
  168. {
  169. //drA 排序
  170. int i = 0;
  171. foreach (string columnName in columnNames)
  172. {
  173. if (drA.Table.Columns.Contains(columnName))
  174. {
  175. drA.Table.Columns[columnName].SetOrdinal(i);
  176. i++;
  177. }
  178. }
  179. }
  180. }
  181. }