/Src/Asp.Net/SqlSugar/Abstract/ExpressionableProvider/Expressionable.cs

https://github.com/sunkaixuan/SqlSugar
C# | 301 lines | 263 code | 38 blank | 0 comment | 48 complexity | 6b7a1feeedd363ddf2dbc0f28fc2eca0 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Text;
  6. namespace SqlSugar
  7. {
  8. public class Expressionable<T> where T : class, new()
  9. {
  10. Expression<Func<T, bool>> _exp = null;
  11. public Expressionable<T> And(Expression<Func<T, bool>> exp)
  12. {
  13. if (_exp == null)
  14. _exp = exp;
  15. else
  16. _exp = Expression.Lambda<Func<T, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  17. return this;
  18. }
  19. public Expressionable<T> AndIF(bool isAnd, Expression<Func<T, bool>> exp)
  20. {
  21. if (isAnd)
  22. And(exp);
  23. return this;
  24. }
  25. public Expressionable<T> Or(Expression<Func<T, bool>> exp)
  26. {
  27. if (_exp == null)
  28. _exp = exp;
  29. else
  30. _exp = Expression.Lambda<Func<T, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  31. return this;
  32. }
  33. public Expressionable<T> OrIF(bool isOr, Expression<Func<T, bool>> exp)
  34. {
  35. if (isOr)
  36. Or(exp);
  37. return this;
  38. }
  39. public Expression<Func<T, bool>> ToExpression()
  40. {
  41. if (_exp == null)
  42. _exp = it => true;
  43. return _exp;
  44. }
  45. }
  46. public class Expressionable<T, T2> where T : class, new() where T2 : class, new()
  47. {
  48. Expression<Func<T, T2, bool>> _exp = null;
  49. public Expressionable<T, T2> And(Expression<Func<T, T2, bool>> exp)
  50. {
  51. if (_exp == null)
  52. _exp = exp;
  53. else
  54. _exp = Expression.Lambda<Func<T, T2, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  55. return this;
  56. }
  57. public Expressionable<T, T2> AndIF(bool isAnd, Expression<Func<T, T2, bool>> exp)
  58. {
  59. if (isAnd)
  60. And(exp);
  61. return this;
  62. }
  63. public Expressionable<T, T2> Or(Expression<Func<T, T2, bool>> exp)
  64. {
  65. if (_exp == null)
  66. _exp = exp;
  67. else
  68. _exp = Expression.Lambda<Func<T, T2, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  69. return this;
  70. }
  71. public Expressionable<T, T2> OrIF(bool isOr, Expression<Func<T, T2, bool>> exp)
  72. {
  73. if (isOr)
  74. Or(exp);
  75. return this;
  76. }
  77. public Expression<Func<T, T2, bool>> ToExpression()
  78. {
  79. if (_exp == null)
  80. _exp = (it, t2) => true;
  81. return _exp;
  82. }
  83. }
  84. public class Expressionable<T, T2, T3> where T : class, new() where T2 : class, new() where T3 : class, new()
  85. {
  86. Expression<Func<T, T2, T3, bool>> _exp = null;
  87. public Expressionable<T, T2, T3> And(Expression<Func<T, T2, T3, bool>> exp)
  88. {
  89. if (_exp == null)
  90. _exp = exp;
  91. else
  92. _exp = Expression.Lambda<Func<T, T2, T3, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  93. return this;
  94. }
  95. public Expressionable<T, T2, T3> AndIF(bool isAnd, Expression<Func<T, T2, T3, bool>> exp)
  96. {
  97. if (isAnd)
  98. And(exp);
  99. return this;
  100. }
  101. public Expressionable<T, T2, T3> Or(Expression<Func<T, T2, T3, bool>> exp)
  102. {
  103. if (_exp == null)
  104. _exp = exp;
  105. else
  106. _exp = Expression.Lambda<Func<T, T2, T3, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  107. return this;
  108. }
  109. public Expressionable<T, T2, T3> OrIF(bool isOr, Expression<Func<T, T2, T3, bool>> exp)
  110. {
  111. if (isOr)
  112. Or(exp);
  113. return this;
  114. }
  115. public Expression<Func<T, T2, T3, bool>> ToExpression()
  116. {
  117. if (_exp == null)
  118. _exp = (it, t2, t3) => true;
  119. return _exp;
  120. }
  121. }
  122. public class Expressionable<T, T2, T3, T4> where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new()
  123. {
  124. Expression<Func<T, T2, T3, T4, bool>> _exp = null;
  125. public Expressionable<T, T2, T3, T4> And(Expression<Func<T, T2, T3, T4, bool>> exp)
  126. {
  127. if (_exp == null)
  128. _exp = exp;
  129. else
  130. _exp = Expression.Lambda<Func<T, T2, T3, T4, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  131. return this;
  132. }
  133. public Expressionable<T, T2, T3, T4> AndIF(bool isAnd, Expression<Func<T, T2, T3, T4, bool>> exp)
  134. {
  135. if (isAnd)
  136. And(exp);
  137. return this;
  138. }
  139. public Expressionable<T, T2, T3, T4> Or(Expression<Func<T, T2, T3, T4, bool>> exp)
  140. {
  141. if (_exp == null)
  142. _exp = exp;
  143. else
  144. _exp = Expression.Lambda<Func<T, T2, T3, T4, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  145. return this;
  146. }
  147. public Expressionable<T, T2, T3, T4> OrIF(bool isOr, Expression<Func<T, T2, T3, T4, bool>> exp)
  148. {
  149. if (isOr)
  150. Or(exp);
  151. return this;
  152. }
  153. public Expression<Func<T, T2, T3, T4, bool>> ToExpression()
  154. {
  155. if (_exp == null)
  156. _exp = (it, t2, t3, t4) => true;
  157. return _exp;
  158. }
  159. }
  160. public class Expressionable<T, T2, T3, T4, T5> where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5 : class, new()
  161. {
  162. Expression<Func<T, T2, T3, T4, T5, bool>> _exp = null;
  163. public Expressionable<T, T2, T3, T4, T5> And(Expression<Func<T, T2, T3, T4, T5, bool>> exp)
  164. {
  165. if (_exp == null)
  166. _exp = exp;
  167. else
  168. _exp = Expression.Lambda<Func<T, T2, T3, T4, T5, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  169. return this;
  170. }
  171. public Expressionable<T, T2, T3, T4, T5> AndIF(bool isAnd, Expression<Func<T, T2, T3, T4, T5, bool>> exp)
  172. {
  173. if (isAnd)
  174. And(exp);
  175. return this;
  176. }
  177. public Expressionable<T, T2, T3, T4, T5> Or(Expression<Func<T, T2, T3, T4, T5, bool>> exp)
  178. {
  179. if (_exp == null)
  180. _exp = exp;
  181. else
  182. _exp = Expression.Lambda<Func<T, T2, T3, T4, T5, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  183. return this;
  184. }
  185. public Expressionable<T, T2, T3, T4, T5> OrIF(bool isOr, Expression<Func<T, T2, T3, T4, T5, bool>> exp)
  186. {
  187. if (isOr)
  188. Or(exp);
  189. return this;
  190. }
  191. public Expression<Func<T, T2, T3, T4, T5, bool>> ToExpression()
  192. {
  193. if (_exp == null)
  194. _exp = (it, t2, t3, t4, T5) => true;
  195. return _exp;
  196. }
  197. }
  198. public class Expressionable<T, T2, T3, T4, T5, T6> where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5 : class, new() where T6 : class, new()
  199. {
  200. Expression<Func<T, T2, T3, T4, T5, T6, bool>> _exp = null;
  201. public Expressionable<T, T2, T3, T4, T5, T6> And(Expression<Func<T, T2, T3, T4, T5, T6, bool>> exp)
  202. {
  203. if (_exp == null)
  204. _exp = exp;
  205. else
  206. _exp = Expression.Lambda<Func<T, T2, T3, T4, T5, T6, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
  207. return this;
  208. }
  209. public Expressionable<T, T2, T3, T4, T5, T6> AndIF(bool isAnd, Expression<Func<T, T2, T3, T4, T5, T6, bool>> exp)
  210. {
  211. if (isAnd)
  212. And(exp);
  213. return this;
  214. }
  215. public Expressionable<T, T2, T3, T4, T5, T6> Or(Expression<Func<T, T2, T3, T4, T5, T6, bool>> exp)
  216. {
  217. if (_exp == null)
  218. _exp = exp;
  219. else
  220. _exp = Expression.Lambda<Func<T, T2, T3, T4, T5, T6, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
  221. return this;
  222. }
  223. public Expressionable<T, T2, T3, T4, T5, T6> OrIF(bool isOr, Expression<Func<T, T2, T3, T4, T5, T6, bool>> exp)
  224. {
  225. if (isOr)
  226. Or(exp);
  227. return this;
  228. }
  229. public Expression<Func<T, T2, T3, T4, T5, T6, bool>> ToExpression()
  230. {
  231. if (_exp == null)
  232. _exp = (it, t2, t3, t4, T5, t6) => true;
  233. return _exp;
  234. }
  235. }
  236. public class Expressionable
  237. {
  238. public static Expressionable<T> Create<T>() where T : class, new()
  239. {
  240. return new Expressionable<T>();
  241. }
  242. public static Expressionable<T, T2> Create<T, T2>() where T : class, new() where T2 : class, new()
  243. {
  244. return new Expressionable<T, T2>();
  245. }
  246. public static Expressionable<T, T2, T3> Create<T, T2, T3>() where T : class, new() where T2 : class, new() where T3 : class, new()
  247. {
  248. return new Expressionable<T, T2, T3>();
  249. }
  250. public static Expressionable<T, T2, T3, T4> Create<T, T2, T3, T4>() where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new()
  251. {
  252. return new Expressionable<T, T2, T3, T4>();
  253. }
  254. public static Expressionable<T, T2, T3, T4, T5> Create<T, T2, T3, T4, T5>() where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5 : class, new()
  255. {
  256. return new Expressionable<T, T2, T3, T4, T5>();
  257. }
  258. public static Expressionable<T, T2, T3, T4, T5, T6> Create<T, T2, T3, T4, T5, T6>() where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5 : class, new() where T6 : class, new()
  259. {
  260. return new Expressionable<T, T2, T3, T4, T5, T6>();
  261. }
  262. }
  263. }