mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
Expression Bug
This commit is contained in:
parent
fe86b89643
commit
f1a6d80f44
@ -21,6 +21,7 @@ namespace OrmTest.UnitTest
|
||||
base.Begin();
|
||||
for (int i = 0; i < base.Count; i++)
|
||||
{
|
||||
whereSingle18();
|
||||
whereSingle17();
|
||||
whereSingle16();
|
||||
whereSingle15();
|
||||
@ -294,6 +295,19 @@ namespace OrmTest.UnitTest
|
||||
new SugarParameter("@MethodConst1","a")
|
||||
}, "whereSingle17");
|
||||
}
|
||||
|
||||
private void whereSingle18()
|
||||
{
|
||||
Expression<Func<DataTestInfo2, bool>> exp = it => !it.Bool1;
|
||||
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
||||
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
||||
var value = expContext.Result.GetString();
|
||||
var pars = expContext.Parameters;
|
||||
base.Check(value, pars, "NOT ( [Bool1]=1 ) ", new List<SugarParameter>()
|
||||
{
|
||||
|
||||
}, "whereSingle18");
|
||||
}
|
||||
}
|
||||
|
||||
public class WhereConst
|
||||
|
@ -46,7 +46,17 @@ namespace SqlSugar
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsLogicOperator(string operatorValue)
|
||||
{
|
||||
return operatorValue=="&&"|| operatorValue=="||";
|
||||
}
|
||||
public static bool IsComparisonOperator(BinaryExpression expression)
|
||||
{
|
||||
return expression.NodeType != ExpressionType.And &&
|
||||
expression.NodeType != ExpressionType.AndAlso &&
|
||||
expression.NodeType != ExpressionType.Or &&
|
||||
expression.NodeType != ExpressionType.OrElse;
|
||||
}
|
||||
public static object GetMemberValue(MemberInfo member, Expression expression)
|
||||
{
|
||||
var memberInfos = new Stack<MemberInfo>();
|
||||
|
@ -18,13 +18,9 @@ namespace SqlSugar
|
||||
else
|
||||
{
|
||||
var expression = this.Expression as BinaryExpression;
|
||||
var operatorValue =parameter.OperatorValue=ExpressionTool.GetOperator(expression.NodeType);
|
||||
var isEqual = expression.NodeType==ExpressionType.Equal;
|
||||
var isComparisonOperator =
|
||||
expression.NodeType != ExpressionType.And &&
|
||||
expression.NodeType != ExpressionType.AndAlso &&
|
||||
expression.NodeType != ExpressionType.Or &&
|
||||
expression.NodeType != ExpressionType.OrElse;
|
||||
var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType);
|
||||
var isEqual = expression.NodeType == ExpressionType.Equal;
|
||||
var isComparisonOperator =ExpressionTool.IsComparisonOperator(expression);
|
||||
base.ExactExpression = expression;
|
||||
var leftExpression = expression.Left;
|
||||
var rightExpression = expression.Right;
|
||||
@ -40,8 +36,9 @@ namespace SqlSugar
|
||||
base.Context.Result.Append(ExpressionConst.Format3);
|
||||
base.Context.Result.Append(ExpressionConst.Format0);
|
||||
}
|
||||
else {
|
||||
base.Context.Result.Replace(ExpressionConst.Format0,ExpressionConst.Format3+ ExpressionConst.Format0);
|
||||
else
|
||||
{
|
||||
base.Context.Result.Replace(ExpressionConst.Format0, ExpressionConst.Format3 + ExpressionConst.Format0);
|
||||
}
|
||||
parameter.LeftExpression = leftExpression;
|
||||
parameter.RightExpression = rightExpression;
|
||||
@ -54,16 +51,17 @@ namespace SqlSugar
|
||||
base.IsLeft = null;
|
||||
if (lsbs && parameter.ValueIsNull)
|
||||
{
|
||||
base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, isEqual?"IS":"IS NOT");
|
||||
base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, isEqual ? "IS" : "IS NOT");
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, operatorValue);
|
||||
base.Context.Result.Replace(ExpressionConst.Format1 +(parameter.Index+1), operatorValue);
|
||||
base.Context.Result.Replace(ExpressionConst.Format1 + (parameter.Index + 1), operatorValue);
|
||||
}
|
||||
base.Context.Result.Append(ExpressionConst.Format4);
|
||||
if (parameter.BaseExpression is BinaryExpression && parameter.IsLeft == true)
|
||||
{
|
||||
base.Context.Result.Append(" "+ExpressionConst.Format1 + parameter.BaseParameter.Index+" ");
|
||||
base.Context.Result.Append(" " + ExpressionConst.Format1 + parameter.BaseParameter.Index + " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,8 +61,11 @@ namespace SqlSugar
|
||||
else
|
||||
{
|
||||
fieldName = getSingleName(parameter, expression, isLeft);
|
||||
if (expression.Type == PubConst.BoolType&&baseParameter.OperatorValue.IsNullOrEmpty()) {
|
||||
fieldName= "( "+fieldName+"=1 )";
|
||||
}
|
||||
fieldName = AppendMember(parameter, isLeft, fieldName);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
if (isSetTempData)
|
||||
|
@ -32,7 +32,20 @@ namespace SqlSugar
|
||||
{
|
||||
Append(parameter, nodeType);
|
||||
}
|
||||
else if (isMember || isConst)
|
||||
else if (isMember)
|
||||
{
|
||||
var isComparisonOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue)||baseParameter.OperatorValue.IsNullOrEmpty();
|
||||
var memberExpression = (base.Expression as MemberExpression);
|
||||
if (memberExpression.Type== PubConst.BoolType&& isComparisonOperator)
|
||||
{
|
||||
Append(parameter, nodeType);
|
||||
}
|
||||
else
|
||||
{
|
||||
Result(parameter, nodeType);
|
||||
}
|
||||
}
|
||||
else if (isConst)
|
||||
{
|
||||
Result(parameter, nodeType);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user