Update exp to sql

This commit is contained in:
sunkaixuan
2019-02-09 20:53:44 +08:00
parent d48878754d
commit 8648167a0b
2 changed files with 16 additions and 1 deletions

View File

@@ -424,6 +424,10 @@ namespace OrmTest.Demo
Name = x.Name ?? "a"
}).ToList();
var test31 = db.Queryable<Student>().Where(it=>(it.Name??"a")=="a").ToList();
var test32 = db.Queryable<Student>().Where(it => it.Name == null ? true : false).ToList();
var test33 = db.Queryable<Student>().Where(it => SqlFunc.IIF(it.Name==null,true ,false)).ToList();
var test34 = db.Queryable<Student>().Where(it => SqlFunc.IIF(it.Name == null||1==1, true, false)).ToList();
// var test35 = db.Queryable<Student>().Where(it => SqlFunc.IF(it.Id==1).Return(true).End(false)).ToList();
}
public static void Page()
{

View File

@@ -9,8 +9,10 @@ namespace SqlSugar
{
public class MethodCallExpressionResolve : BaseResolve
{
int contextIndex = 0;
public MethodCallExpressionResolve(ExpressionParameter parameter) : base(parameter)
{
contextIndex = this.Context.Index;
var express = base.Expression as MethodCallExpression;
if (express == null) return;
var isLeft = parameter.IsLeft;
@@ -250,10 +252,19 @@ namespace SqlSugar
new KeyValuePair<string, string>("End","0")
});
}
if (parameter.Context.Index == 3 && parameter.BaseExpression == null &&this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple,ResolveExpressType.WhereSingle)&& (parameter.CurrentExpression is MethodCallExpression) && ((parameter.CurrentExpression as MethodCallExpression).Method.Name.IsIn("ToBool", "ToBoolean")))
var isRoot = contextIndex == 2;
if (isRoot && parameter.BaseExpression == null &&this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple,ResolveExpressType.WhereSingle)&& (parameter.CurrentExpression is MethodCallExpression) && ((parameter.CurrentExpression as MethodCallExpression).Method.Name.IsIn("ToBool", "ToBoolean")))
{
methodValue = methodValue + "=1 ";
; }
if (isRoot && parameter.BaseExpression == null && this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple, ResolveExpressType.WhereSingle) && (parameter.CurrentExpression is ConditionalExpression) && ((parameter.CurrentExpression as ConditionalExpression).Type==UtilConstants.BoolType))
{
methodValue = methodValue + "=1 ";
}
if (isRoot && parameter.BaseExpression == null && this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple, ResolveExpressType.WhereSingle) && (parameter.CurrentExpression is MethodCallExpression) && ((parameter.CurrentExpression as MethodCallExpression).Method.Name.IsIn("IIF"))&& (parameter.CurrentExpression as MethodCallExpression).Method.ReturnType==UtilConstants.BoolType)
{
methodValue = methodValue + "=1 ";
}
base.AppendValue(parameter, isLeft, methodValue);
}