mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-12-26 14:15:50 +08:00
Exp to sql support conditional ? true : false
This commit is contained in:
@@ -409,6 +409,19 @@ namespace OrmTest.Demo
|
||||
var test22 = db.Queryable<Student>().Where(it => !it.SchoolId.HasValue && it.SchoolId.HasValue).ToList();
|
||||
var test23 = db.Queryable<Student>().Where(it => !(it.Id==1) && it.Name=="").ToList();
|
||||
var test24 = db.Queryable<Student>().Where(it => string.IsNullOrEmpty("a")).Where(it=>string.IsNullOrEmpty(it.Name)).ToList();
|
||||
var test25 = db.Queryable<Student>().Where(it => SqlFunc.IIF(it.Id==0,1,2)==1).ToList();
|
||||
var test26 = db.Queryable<Student>().Where(it => (it.Name==null?2:3)==1 )
|
||||
.ToList();
|
||||
var test27 = db.Queryable<Student>().Select(x => new {
|
||||
name=x.Name==null?"1":"2"
|
||||
}).ToList();
|
||||
var test28 = db.Queryable<Student>().Select(x => new Student{
|
||||
Name = x.Name == null ? "1" : "2"
|
||||
}).ToList();
|
||||
//var test29 = db.Queryable<Student>().Select(x => new Student
|
||||
//{
|
||||
// Name = x.Name??"a"
|
||||
//}).ToList();
|
||||
}
|
||||
public static void Page()
|
||||
{
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace SqlSugar
|
||||
if (parameter.BaseExpression is BinaryExpression || parameter.BaseExpression == null)
|
||||
{
|
||||
var oppoSiteExpression = isLeft == true ? parameter.BaseParameter.RightExpression : parameter.BaseParameter.LeftExpression;
|
||||
if (parameter.CurrentExpression is MethodCallExpression)
|
||||
if (parameter.CurrentExpression is MethodCallExpression||parameter.CurrentExpression is ConditionalExpression)
|
||||
{
|
||||
var appendValue = value;
|
||||
if (this.Context.Result.Contains(ExpressionConst.FormatSymbol))
|
||||
@@ -438,7 +438,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (item is MethodCallExpression|| item is UnaryExpression)
|
||||
else if (item is MethodCallExpression|| item is UnaryExpression||item is ConditionalExpression)
|
||||
{
|
||||
this.Expression = item;
|
||||
this.Start();
|
||||
|
||||
@@ -5,27 +5,38 @@ using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class ConditionalExpressionResolve:BaseResolve
|
||||
public class ConditionalExpressionResolve: MethodCallExpressionResolve
|
||||
{
|
||||
public ConditionalExpressionResolve(ExpressionParameter parameter) : base(parameter)
|
||||
public ConditionalExpressionResolve(ExpressionParameter parameter) : base(parameter)
|
||||
{
|
||||
|
||||
string name = "IIF";
|
||||
var express = base.Expression as ConditionalExpression;
|
||||
var args = new List<Expression>() {
|
||||
express.Test,
|
||||
express.IfTrue,
|
||||
express.IfFalse
|
||||
};
|
||||
var isLeft = parameter.IsLeft;
|
||||
switch (base.Context.ResolveType)
|
||||
MethodCallExpressionModel model = new MethodCallExpressionModel();
|
||||
model.Args = new List<MethodCallExpressionArgs>();
|
||||
switch (this.Context.ResolveType)
|
||||
{
|
||||
case ResolveExpressType.None:
|
||||
case ResolveExpressType.WhereSingle:
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
|
||||
base.Where(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
case ResolveExpressType.Update:
|
||||
base.Select(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
case ResolveExpressType.Join:
|
||||
case ResolveExpressType.ArraySingle:
|
||||
case ResolveExpressType.ArrayMultiple:
|
||||
case ResolveExpressType.Update:
|
||||
base.Field(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
default:
|
||||
Check.Exception(true, "Does not support it.xx==value ? true:false , Use SqlFunc.IIF (it.xx==value,true,false)");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace SqlSugar
|
||||
public MethodCallExpressionResolve(ExpressionParameter parameter) : base(parameter)
|
||||
{
|
||||
var express = base.Expression as MethodCallExpression;
|
||||
if (express == null) return;
|
||||
var isLeft = parameter.IsLeft;
|
||||
string methodName = express.Method.Name;
|
||||
var isValidNativeMethod = IsValidNativeMethod(express, methodName);
|
||||
@@ -103,7 +104,7 @@ namespace SqlSugar
|
||||
return false;
|
||||
}
|
||||
|
||||
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
protected void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
if (!CheckMethod(express))
|
||||
{
|
||||
@@ -188,7 +189,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private void Field(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
protected void Field(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
{
|
||||
if (this.Context.ResolveType == ResolveExpressType.FieldSingle)
|
||||
{
|
||||
@@ -200,7 +201,7 @@ namespace SqlSugar
|
||||
}
|
||||
Where(parameter, isLeft, name, args, model);
|
||||
}
|
||||
private void Select(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
protected void Select(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
{
|
||||
if (name == "GetSelfAndAutoFill")
|
||||
{
|
||||
@@ -227,7 +228,7 @@ namespace SqlSugar
|
||||
parameter.BaseParameter.CommonTempData = GetMethodValue(name, model);
|
||||
}
|
||||
}
|
||||
private void Where(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
protected void Where(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
{
|
||||
foreach (var item in args)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user