Support it.XX??"value"

This commit is contained in:
sunkaixuan
2019-02-09 19:32:26 +08:00
parent 7ba9656d77
commit d48878754d
4 changed files with 55 additions and 6 deletions

View File

@@ -419,10 +419,11 @@ namespace OrmTest.Demo
Name = x.Name == null ? "1" : "2"
}).ToList();
var test29 = db.Queryable<Student>().Where(it=>it.Id%1==0).ToList();
//var test29 = db.Queryable<Student>().Select(x => new Student
//{
// Name = x.Name??"a"
//}).ToList();
var test30 = db.Queryable<Student>().Select(x => new Student
{
Name = x.Name ?? "a"
}).ToList();
var test31 = db.Queryable<Student>().Where(it=>(it.Name??"a")=="a").ToList();
}
public static void Page()
{

View File

@@ -44,6 +44,10 @@ namespace SqlSugar
{
return new LambdaExpressionResolve(parameter);
}
else if (expression is BinaryExpression && expression.NodeType == ExpressionType.Coalesce)
{
return new CoalesceResolveItems(parameter);
}
else if (expression is BinaryExpression)
{
return new BinaryExpressionResolve(parameter);
@@ -129,7 +133,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||parameter.CurrentExpression is ConditionalExpression)
if (parameter.CurrentExpression is MethodCallExpression||parameter.CurrentExpression is ConditionalExpression||parameter.CurrentExpression.NodeType==ExpressionType.Coalesce)
{
var appendValue = value;
if (this.Context.Result.Contains(ExpressionConst.FormatSymbol))
@@ -438,7 +442,7 @@ namespace SqlSugar
}
}
}
else if (item is MethodCallExpression|| item is UnaryExpression||item is ConditionalExpression)
else if (item is MethodCallExpression|| item is UnaryExpression||item is ConditionalExpression|| item.NodeType==ExpressionType.Coalesce)
{
this.Expression = item;
this.Start();

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class CoalesceResolveItems : MethodCallExpressionResolve
{
public CoalesceResolveItems(ExpressionParameter parameter) : base(parameter)
{
string name = "IsNull";
var express = base.Expression as BinaryExpression;
var args = new List<Expression>() {
express.Left,
express.Right
};
var isLeft = parameter.IsLeft;
MethodCallExpressionModel model = new MethodCallExpressionModel();
model.Args = new List<MethodCallExpressionArgs>();
switch (this.Context.ResolveType)
{
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:
base.Field(parameter, isLeft, name, args, model);
break;
default:
break;
}
}
}
}

View File

@@ -90,6 +90,7 @@
<Compile Include="ExpressionsToSql\CaseWhen\CaseWhen.cs" />
<Compile Include="ExpressionsToSql\CaseWhen\CaseWhenResolve.cs" />
<Compile Include="ExpressionsToSql\DbMethods\SqlFuncExternal.cs" />
<Compile Include="ExpressionsToSql\ResolveItems\CoalesceResolveItems.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\ISubOperation.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubAnd.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubCount.cs" />