mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-10 03:14:57 +08:00
-
This commit is contained in:
@@ -725,18 +725,15 @@ namespace OrmTest.UnitTest
|
|||||||
|
|
||||||
private void IIF4()
|
private void IIF4()
|
||||||
{
|
{
|
||||||
//Expression<Func<DataTestInfo2, bool>> exp = it => SqlFunc.IIF(true, it.Bool1, it.Bool2) == true;
|
Expression<Func<DataTestInfo2, bool>> exp = it => SqlFunc.IIF(true, it.Bool1, it.Bool2) == true;
|
||||||
//SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
||||||
//expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
||||||
//var value = expContext.Result.GetString();
|
var value = expContext.Result.GetString();
|
||||||
//var pars = expContext.Parameters;
|
var pars = expContext.Parameters;
|
||||||
//base.Check(value, pars, "(( CASE WHEN ([Name] like '%'+@MethodConst0+'%') THEN @MethodConst1 ELSE @MethodConst2 END ) = @Const3 )", new List<SugarParameter>()
|
base.Check(value, pars, "(( CASE WHEN ( 1 = 1 ) THEN [Bool1] ELSE [Bool2] END ) = @Const0 )", new List<SugarParameter>()
|
||||||
//{
|
{
|
||||||
// new SugarParameter("@MethodConst0","a"),
|
new SugarParameter("@Const0",true)
|
||||||
// new SugarParameter("@MethodConst1",true),
|
}, "IIF4 error");
|
||||||
// new SugarParameter("@MethodConst2",false),
|
|
||||||
// new SugarParameter("@Const3",true)
|
|
||||||
//}, "IIF4 error");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,19 +146,33 @@ namespace SqlSugar
|
|||||||
private void AppendItem(ExpressionParameter parameter, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, Expression item)
|
private void AppendItem(ExpressionParameter parameter, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, Expression item)
|
||||||
{
|
{
|
||||||
var isBinaryExpression = item is BinaryExpression || item is MethodCallExpression;
|
var isBinaryExpression = item is BinaryExpression || item is MethodCallExpression;
|
||||||
var isIFFBoolMember = name == "IIF" && (args.Last() is MemberExpression) && (args.Last() as MemberExpression).Type == PubConst.BoolType;
|
var isConst = item is ConstantExpression;
|
||||||
var isIFFUnary = name == "IIF" && (args.Last() is UnaryExpression) && (args.Last() as UnaryExpression).Operand.Type == PubConst.BoolType;
|
var isIIF= name == "IIF";
|
||||||
var isIFFBoolBinary = name == "IIF" && (args.Last() is BinaryExpression) && (args.Last() as BinaryExpression).Type == PubConst.BoolType;
|
var isIFFBoolMember = isIIF && (item is MemberExpression) && (item as MemberExpression).Type == PubConst.BoolType;
|
||||||
if (isIFFUnary && item != args.First())
|
var isIFFUnary = isIIF && (item is UnaryExpression) && (item as UnaryExpression).Operand.Type == PubConst.BoolType;
|
||||||
|
var isIFFBoolBinary = isIIF && (item is BinaryExpression) && (item as BinaryExpression).Type == PubConst.BoolType;
|
||||||
|
var isFirst = item == args.First();
|
||||||
|
if (isFirst&& isIIF && isConst)
|
||||||
|
{
|
||||||
|
var value = (item as ConstantExpression).Value.ObjToBool() ? this.Context.DbMehtods.True() : this.Context.DbMehtods.False();
|
||||||
|
var methodCallExpressionArgs = new MethodCallExpressionArgs()
|
||||||
|
{
|
||||||
|
IsMember =true,
|
||||||
|
MemberName = value,
|
||||||
|
MemberValue= value
|
||||||
|
};
|
||||||
|
model.Args.Add(methodCallExpressionArgs);
|
||||||
|
}
|
||||||
|
else if (isIFFUnary && !isFirst)
|
||||||
{
|
{
|
||||||
AppendModelByIIFMember(parameter, model, (item as UnaryExpression).Operand);
|
AppendModelByIIFMember(parameter, model, (item as UnaryExpression).Operand);
|
||||||
}
|
}
|
||||||
else if (isIFFBoolMember && item != args.First())
|
else if (isIFFBoolMember && !isFirst)
|
||||||
{
|
{
|
||||||
AppendModelByIIFMember(parameter, model, item);
|
AppendModelByIIFMember(parameter, model, item);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (isIFFBoolBinary && item != args.First())
|
else if (isIFFBoolBinary && !isFirst)
|
||||||
{
|
{
|
||||||
AppendModelByIIFBinary(parameter, model, item);
|
AppendModelByIIFBinary(parameter, model, item);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user