BaseResolve_Validate.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Reflection;
  6. using System.Text;
  7. namespace SqlSugar
  8. {
  9. /// <summary>
  10. /// BaseResolve-Validate
  11. /// </summary>
  12. public partial class BaseResolve
  13. {
  14. private static bool IsSubToList(Expression item)
  15. {
  16. return ExpressionTool.GetMethodName(item).IsIn("ToList","First") && IsSubquery(item);
  17. }
  18. private static bool IsSubquery(Expression item)
  19. {
  20. var method = (item as MethodCallExpression);
  21. if (method == null)
  22. return false;
  23. if (method.Object == null)
  24. return false;
  25. return method.Object.Type.Name.StartsWith("Subquery");
  26. }
  27. private bool IsExtSqlFuncObj(Expression item)
  28. {
  29. return this.Context.SqlFuncServices != null && item is MethodCallExpression && this.Context.SqlFuncServices.Any(it => it.UniqueMethodName == ExpressionTool.GetMethodName(item));
  30. }
  31. private bool IsNullValue(ExpressionParameter parameter, object value)
  32. {
  33. return value == null
  34. && !parameter.ValueIsNull
  35. && parameter.BaseParameter != null
  36. && parameter.BaseParameter.OperatorValue.IsIn("=", "<>")
  37. && this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple, ResolveExpressType.WhereSingle);
  38. }
  39. private static bool IsNotCaseExpression(Expression item)
  40. {
  41. if ((item as MethodCallExpression).Method.Name == "IIF")
  42. {
  43. return false;
  44. }
  45. else if ((item as MethodCallExpression).Method.Name == "IsNull")
  46. {
  47. return false;
  48. }
  49. else if ((item as MethodCallExpression).Method.Name == "End" && item.ToString().Contains("IF("))
  50. {
  51. return false;
  52. }
  53. else if ((item as MethodCallExpression).Method.Name == "AggregateMax")
  54. {
  55. return false;
  56. }
  57. else if ((item as MethodCallExpression).Method.Name == "AggregateMin")
  58. {
  59. return false;
  60. }
  61. else if ((item as MethodCallExpression).Method.Name == "AggregateSum")
  62. {
  63. return false;
  64. }
  65. else if ((item as MethodCallExpression).Method.Name == "ToBool")
  66. {
  67. return false;
  68. }
  69. else if ((item as MethodCallExpression).Method.Name == "ToBoolean")
  70. {
  71. return false;
  72. }
  73. else if ((item as MethodCallExpression).Method.Name == "Select" && item.ToString().Contains("Subqueryable()"))
  74. {
  75. return false;
  76. }
  77. else
  78. {
  79. return true;
  80. }
  81. }
  82. private static bool IsBoolValue(Expression item)
  83. {
  84. return item.Type == UtilConstants.BoolType &&
  85. (item is MemberExpression) &&
  86. (item as MemberExpression).Expression != null &&
  87. (item as MemberExpression).Expression.Type == typeof(bool?) &&
  88. (item as MemberExpression).Member.Name == "Value";
  89. }
  90. protected static bool IsConvert(Expression item)
  91. {
  92. return item is UnaryExpression && item.NodeType == ExpressionType.Convert;
  93. }
  94. protected static bool IsNotMember(Expression item)
  95. {
  96. return item is UnaryExpression &&
  97. item.Type == UtilConstants.BoolType &&
  98. (item as UnaryExpression).NodeType == ExpressionType.Not &&
  99. (item as UnaryExpression).Operand is MemberExpression &&
  100. ((item as UnaryExpression).Operand as MemberExpression).Expression != null &&
  101. ((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.Parameter;
  102. }
  103. protected static bool IsNotParameter(Expression item)
  104. {
  105. return item is UnaryExpression &&
  106. item.Type == UtilConstants.BoolType &&
  107. (item as UnaryExpression).NodeType == ExpressionType.Not &&
  108. (item as UnaryExpression).Operand is MemberExpression &&
  109. ((item as UnaryExpression).Operand as MemberExpression).Expression != null &&
  110. ((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.MemberAccess;
  111. }
  112. protected bool IsSubMethod(MethodCallExpression express)
  113. {
  114. return SubTools.SubItemsConst.Any(it => express.Object != null && express.Object.Type.Name.StartsWith("Subqueryable`"));
  115. }
  116. }
  117. }