Update exp to sql

This commit is contained in:
sunkaixuan 2019-05-28 16:12:19 +08:00
parent 07ede27242
commit cb954fbf4b
3 changed files with 44 additions and 0 deletions

View File

@ -500,6 +500,15 @@ namespace SqlSugar
((item as UnaryExpression).Operand as MemberExpression).Expression != null &&
((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.Parameter;
}
protected static bool IsNotParameter(Expression item)
{
return item is UnaryExpression &&
item.Type == UtilConstants.BoolType &&
(item as UnaryExpression).NodeType == ExpressionType.Not &&
(item as UnaryExpression).Operand is MemberExpression &&
((item as UnaryExpression).Operand as MemberExpression).Expression != null &&
((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.MemberAccess;
}
protected bool IsSubMethod(MethodCallExpression express)
{

View File

@ -80,6 +80,17 @@ namespace SqlSugar
base.Context.Result.CurrentParameter = null;
}
}
else if (IsNotParameter(item))
{
try
{
parameter.Context.Result.Append(base.Context.GetEqString(memberName,AppendParameter(ExpressionTool.DynamicInvoke(item).ObjToBool())));
}
catch
{
throw new NotSupportedException(item.ToString());
}
}
else if (IsMethod(item))
{
if (item is UnaryExpression)

View File

@ -41,6 +41,10 @@ namespace SqlSugar
{
AppendNotMember(parameter,nodeType);
}
else if (baseParameter.OperatorValue == "=" && IsNotParameter(oldExpression))
{
AppendNotParameter(parameter, nodeType);
}
else if (base.Expression is BinaryExpression || parameter.BaseExpression is BinaryExpression || baseParameter.CommonTempData.ObjToString() == CommonTempDataType.Append.ToString())
{
Append(parameter, nodeType);
@ -156,5 +160,25 @@ namespace SqlSugar
parameter.CommonTempData = null;
}
private void AppendNotParameter(ExpressionParameter parameter, ExpressionType nodeType)
{
BaseParameter.ChildExpression = base.Expression;
this.IsLeft = parameter.IsLeft;
parameter.CommonTempData = CommonTempDataType.Result;
base.Start();
var result = this.Context.DbMehtods.IIF(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(parameter.CommonTempData)+"=1" },
new MethodCallExpressionArgs(){ IsMember=true,MemberName=AppendParameter(0) },
new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(1) }
}
});
this.Context.Result.Append(result);
parameter.BaseParameter.ChildExpression = base.Expression;
parameter.CommonTempData = null;
}
}
}