mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-23 04:23:47 +08:00
Update .net core project
This commit is contained in:
@@ -28,25 +28,29 @@ namespace SqlSugar
|
||||
{
|
||||
var expression = this.Expression as BinaryExpression;
|
||||
var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType);
|
||||
|
||||
if (IsGroupSubquery(expression.Right,operatorValue))
|
||||
var isSubGroup = IsGroupSubquery(expression.Right, operatorValue);
|
||||
if (isSubGroup)
|
||||
{
|
||||
if (ExpressionTool.IsUnConvertExpress(expression.Right))
|
||||
{
|
||||
InSubGroupByConvertExpress(expression);
|
||||
SubGroup(expression, operatorValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
InSubGroupBy(expression, operatorValue=="<>"?"NOT":"");
|
||||
DefaultBinary(parameter, expression, operatorValue);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
private void DefaultBinary(ExpressionParameter parameter, BinaryExpression expression, string operatorValue)
|
||||
{
|
||||
var isEqual = expression.NodeType == ExpressionType.Equal;
|
||||
var isComparisonOperator = ExpressionTool.IsComparisonOperator(expression);
|
||||
base.ExactExpression = expression;
|
||||
var leftExpression = expression.Left;
|
||||
var rightExpression = expression.Right;
|
||||
if (RightIsHasValue(leftExpression, rightExpression,ExpressionTool.IsLogicOperator(expression)))
|
||||
{
|
||||
Expression trueValue = Expression.Constant(true);
|
||||
rightExpression = ExpressionBuilderHelper.CreateExpression(rightExpression, trueValue, ExpressionType.And);
|
||||
}
|
||||
var leftIsBinary = leftExpression is BinaryExpression;
|
||||
var rightBinary = rightExpression is BinaryExpression;
|
||||
var lbrs = leftIsBinary && !rightBinary;
|
||||
@@ -54,6 +58,27 @@ namespace SqlSugar
|
||||
var lbrb = rightBinary && leftIsBinary;
|
||||
var lsbs = !leftIsBinary && !rightBinary;
|
||||
var isAppend = !base.Context.Result.Contains(ExpressionConst.FormatSymbol);
|
||||
ConvertExpression(ref leftExpression, ref rightExpression, isAppend);
|
||||
parameter.LeftExpression = leftExpression;
|
||||
parameter.RightExpression = rightExpression;
|
||||
Left(expression, leftExpression);
|
||||
Right(parameter, operatorValue, isEqual, rightExpression, lsbs);
|
||||
}
|
||||
|
||||
private void SubGroup(BinaryExpression expression, string operatorValue)
|
||||
{
|
||||
if (ExpressionTool.IsUnConvertExpress(expression.Right))
|
||||
{
|
||||
InSubGroupByConvertExpress(expression);
|
||||
}
|
||||
else
|
||||
{
|
||||
InSubGroupBy(expression, operatorValue == "<>" ? "NOT" : "");
|
||||
}
|
||||
}
|
||||
|
||||
private void ConvertExpression(ref Expression leftExpression, ref Expression rightExpression, bool isAppend)
|
||||
{
|
||||
if (isAppend)
|
||||
{
|
||||
base.Context.Result.Append(ExpressionConst.LeftParenthesis);
|
||||
@@ -71,23 +96,14 @@ namespace SqlSugar
|
||||
{
|
||||
leftExpression = (leftExpression as UnaryExpression).Operand;
|
||||
}
|
||||
if (rightExpression is UnaryExpression&& (rightExpression as UnaryExpression).NodeType == ExpressionType.Convert)
|
||||
if (rightExpression is UnaryExpression && (rightExpression as UnaryExpression).NodeType == ExpressionType.Convert)
|
||||
{
|
||||
rightExpression = (rightExpression as UnaryExpression).Operand;
|
||||
}
|
||||
parameter.LeftExpression = leftExpression;
|
||||
parameter.RightExpression = rightExpression;
|
||||
base.Expression = leftExpression;
|
||||
base.IsLeft = true;
|
||||
base.Start();
|
||||
if (leftExpression is UnaryExpression && leftExpression.Type == UtilConstants.BoolType && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace))
|
||||
{
|
||||
this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType));
|
||||
}
|
||||
else if (leftExpression is UnaryExpression && ExpressionTool.RemoveConvert(leftExpression) is BinaryExpression && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace))
|
||||
|
||||
private void Right(ExpressionParameter parameter, string operatorValue, bool isEqual, Expression rightExpression, bool lsbs)
|
||||
{
|
||||
this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType));
|
||||
}
|
||||
base.IsLeft = false;
|
||||
base.Expression = rightExpression;
|
||||
base.Start();
|
||||
@@ -109,6 +125,21 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private void Left(BinaryExpression expression, Expression leftExpression)
|
||||
{
|
||||
base.Expression = leftExpression;
|
||||
base.IsLeft = true;
|
||||
base.Start();
|
||||
if (leftExpression is UnaryExpression && leftExpression.Type == UtilConstants.BoolType && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace))
|
||||
{
|
||||
this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType));
|
||||
}
|
||||
else if (leftExpression is UnaryExpression && ExpressionTool.RemoveConvert(leftExpression) is BinaryExpression && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace))
|
||||
{
|
||||
this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType));
|
||||
}
|
||||
}
|
||||
|
||||
private void InSubGroupByConvertExpress(BinaryExpression expression)
|
||||
{
|
||||
var leftSql = GetNewExpressionValue(expression.Left);
|
||||
@@ -187,5 +218,15 @@ namespace SqlSugar
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool RightIsHasValue(Expression leftExpression, Expression rightExpression,bool isLogic)
|
||||
{
|
||||
return isLogic&&
|
||||
leftExpression.Type == UtilConstants.BoolType &&
|
||||
rightExpression.Type == UtilConstants.BoolType &&
|
||||
rightExpression is MethodCallExpression &&
|
||||
(rightExpression as MethodCallExpression).Method.Name == "HasValue";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user