diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index eb4991af7..ae95f26bd 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -419,10 +419,11 @@ namespace OrmTest.Demo Name = x.Name == null ? "1" : "2" }).ToList(); var test29 = db.Queryable().Where(it=>it.Id%1==0).ToList(); - //var test29 = db.Queryable().Select(x => new Student - //{ - // Name = x.Name??"a" - //}).ToList(); + var test30 = db.Queryable().Select(x => new Student + { + Name = x.Name ?? "a" + }).ToList(); + var test31 = db.Queryable().Where(it=>(it.Name??"a")=="a").ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index edaa895f2..34b8effe0 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -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(); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/CoalesceResolveItems.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/CoalesceResolveItems.cs new file mode 100644 index 000000000..0887070e7 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/CoalesceResolveItems.cs @@ -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() { + express.Left, + express.Right + }; + var isLeft = parameter.IsLeft; + MethodCallExpressionModel model = new MethodCallExpressionModel(); + model.Args = new List(); + 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; + } + } + } +} diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index 10eb4aa10..40dc2f2d1 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -90,6 +90,7 @@ +