Update .net core project

This commit is contained in:
sunkaixuan
2022-08-16 13:49:53 +08:00
parent 2845bde9d4
commit f2ade58c57

View File

@@ -28,25 +28,29 @@ namespace SqlSugar
{ {
var expression = this.Expression as BinaryExpression; var expression = this.Expression as BinaryExpression;
var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType); var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType);
var isSubGroup = IsGroupSubquery(expression.Right, operatorValue);
if (IsGroupSubquery(expression.Right,operatorValue)) if (isSubGroup)
{ {
if (ExpressionTool.IsUnConvertExpress(expression.Right)) SubGroup(expression, operatorValue);
{
InSubGroupByConvertExpress(expression);
}
else
{
InSubGroupBy(expression, operatorValue=="<>"?"NOT":"");
}
return;
} }
else
{
DefaultBinary(parameter, expression, operatorValue);
}
}
private void DefaultBinary(ExpressionParameter parameter, BinaryExpression expression, string operatorValue)
{
var isEqual = expression.NodeType == ExpressionType.Equal; var isEqual = expression.NodeType == ExpressionType.Equal;
var isComparisonOperator = ExpressionTool.IsComparisonOperator(expression); var isComparisonOperator = ExpressionTool.IsComparisonOperator(expression);
base.ExactExpression = expression; base.ExactExpression = expression;
var leftExpression = expression.Left; var leftExpression = expression.Left;
var rightExpression = expression.Right; 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 leftIsBinary = leftExpression is BinaryExpression;
var rightBinary = rightExpression is BinaryExpression; var rightBinary = rightExpression is BinaryExpression;
var lbrs = leftIsBinary && !rightBinary; var lbrs = leftIsBinary && !rightBinary;
@@ -54,6 +58,27 @@ namespace SqlSugar
var lbrb = rightBinary && leftIsBinary; var lbrb = rightBinary && leftIsBinary;
var lsbs = !leftIsBinary && !rightBinary; var lsbs = !leftIsBinary && !rightBinary;
var isAppend = !base.Context.Result.Contains(ExpressionConst.FormatSymbol); 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) if (isAppend)
{ {
base.Context.Result.Append(ExpressionConst.LeftParenthesis); base.Context.Result.Append(ExpressionConst.LeftParenthesis);
@@ -71,23 +96,14 @@ namespace SqlSugar
{ {
leftExpression = (leftExpression as UnaryExpression).Operand; 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; rightExpression = (rightExpression as UnaryExpression).Operand;
} }
parameter.LeftExpression = leftExpression; }
parameter.RightExpression = rightExpression;
base.Expression = leftExpression; private void Right(ExpressionParameter parameter, string operatorValue, bool isEqual, Expression rightExpression, bool lsbs)
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));
}
base.IsLeft = false; base.IsLeft = false;
base.Expression = rightExpression; base.Expression = rightExpression;
base.Start(); 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) private void InSubGroupByConvertExpress(BinaryExpression expression)
{ {
var leftSql = GetNewExpressionValue(expression.Left); var leftSql = GetNewExpressionValue(expression.Left);
@@ -187,5 +218,15 @@ namespace SqlSugar
} }
return true; 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";
}
} }
} }