AbstractQueryStringBuilder.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace WebAPIBase.NetCore.BusinessCore
  8. {
  9. public abstract class AbstractQueryStringBuilder : IQueryStringBuilder
  10. {
  11. public string QueryMainString;
  12. public string QueryKeyString;
  13. public string QueryOtherString;
  14. public bool IsNeedWhere = true;
  15. private ArrayList strategys = new ArrayList();
  16. private ArrayList orders = new ArrayList();
  17. public AbstractQueryStringBuilder()
  18. {
  19. }
  20. public virtual ArrayList GetStategys()
  21. {
  22. return strategys;
  23. }
  24. public virtual void AddStrategy(Strategy strategy, bool isUnique)
  25. {
  26. if (isUnique)
  27. {
  28. ReomveStrategy(strategy.Name);
  29. }
  30. AddStrategy(strategy);
  31. }
  32. public virtual void AddStrategy(Strategy strategy)
  33. {
  34. int parameterCount = strategy.GetParameterCount();
  35. for (int i = 0; i < parameterCount; i++)
  36. {
  37. string text = strategy.GetParameter(i);
  38. if (strategy.Type != StrategyType.StringIn && strategy.Type != StrategyType.Other && strategy.Type != StrategyType.StringRange && strategy.Type != StrategyType.NumberIn)
  39. {
  40. text = text.Replace("'", "''");
  41. }
  42. strategy.SetParameter(i, text);
  43. }
  44. strategys.Add(strategy);
  45. }
  46. public virtual void ReomveStrategy(object strategyName)
  47. {
  48. int count = strategys.Count;
  49. if (count == 0)
  50. {
  51. return;
  52. }
  53. for (int num = count - 1; num >= 0; num--)
  54. {
  55. Strategy strategy = (Strategy)strategys[num];
  56. if (strategyName.ToString() == strategy.Name.ToString())
  57. {
  58. strategys.Remove(strategy);
  59. }
  60. }
  61. }
  62. public virtual void ClearStrategy()
  63. {
  64. strategys.Clear();
  65. }
  66. public virtual void AddOrder(string Name, bool IsASC)
  67. {
  68. RemoveOrder(Name);
  69. orders.Add(new QueryOrder(Name, IsASC));
  70. }
  71. public virtual void RemoveOrder(string name)
  72. {
  73. int count = orders.Count;
  74. if (count == 0)
  75. {
  76. return;
  77. }
  78. for (int num = count - 1; num >= 0; num--)
  79. {
  80. QueryOrder queryOrder = (QueryOrder)orders[num];
  81. if (queryOrder.Name == name)
  82. {
  83. orders.Remove(queryOrder);
  84. }
  85. }
  86. }
  87. public virtual string BuildStrategysString()
  88. {
  89. if (strategys.Count == 0)
  90. {
  91. return "";
  92. }
  93. int num = 0;
  94. StringBuilder stringBuilder = new StringBuilder();
  95. if (IsNeedWhere)
  96. {
  97. stringBuilder.Append(" where ");
  98. }
  99. else
  100. {
  101. stringBuilder.Append(" and ");
  102. }
  103. IEnumerator enumerator = strategys.GetEnumerator();
  104. while (enumerator.MoveNext())
  105. {
  106. if (num != 0)
  107. {
  108. stringBuilder.Append(" and ");
  109. }
  110. Strategy strategy = (Strategy)enumerator.Current;
  111. stringBuilder.Append(BuildSingleStrategyString(strategy));
  112. num++;
  113. }
  114. return stringBuilder.ToString();
  115. }
  116. public virtual string BuildOrderString()
  117. {
  118. if (orders.Count == 0)
  119. {
  120. return "";
  121. }
  122. StringBuilder stringBuilder = new StringBuilder();
  123. int count = orders.Count;
  124. for (int i = 0; i < count; i++)
  125. {
  126. if (i != 0)
  127. {
  128. stringBuilder.Append(" , ");
  129. }
  130. else
  131. {
  132. stringBuilder.Append(" Order By ");
  133. }
  134. QueryOrder queryOrder = (QueryOrder)orders[i];
  135. string name = queryOrder.Name;
  136. bool sort = queryOrder.Sort;
  137. stringBuilder.Append(name);
  138. if (sort)
  139. {
  140. stringBuilder.Append(" ASC ");
  141. }
  142. else
  143. {
  144. stringBuilder.Append(" DESC ");
  145. }
  146. }
  147. return stringBuilder.ToString();
  148. }
  149. public virtual string BuildSingleStrategyString(Strategy strategy)
  150. {
  151. return StandardStrategyStringBuilder.BuildStrategyString(strategy);
  152. }
  153. public virtual string BuildMainQueryString()
  154. {
  155. return QueryMainString + BuildStrategysString() + BuildOrderString();
  156. }
  157. public virtual string BuildKeyQueryString()
  158. {
  159. return QueryKeyString + BuildStrategysString() + BuildOrderString();
  160. }
  161. public virtual string BuildOtherQueryString()
  162. {
  163. return QueryOtherString + BuildStrategysString() + BuildOrderString();
  164. }
  165. }
  166. }