From 5a3708172eacaa97ee01d01a833303d1050fe722 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 15 Apr 2019 20:43:50 +0800 Subject: [PATCH] Update exp to sql --- Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 4 +++ .../ResolveItems/MemberExpressionResolve.cs | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index d3dd90555..dc4335ed8 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -447,6 +447,10 @@ namespace OrmTest.Demo }).ToList(); var test46 = db.Queryable().Where(it => it.CreateTime > SqlFunc.ToDate(DateTime.Now.Date)).ToList(); var test47 = db.Queryable().Where(it =>string.IsNullOrEmpty(it.Name)==true).ToList(); + var test48 = db.Queryable().Where(it=>it.CreateTime!=null).Where(it => SqlFunc.ToDate(it.CreateTime).Date==DateTime.Now.Date).ToList(); + var test49 = db.Queryable().Where(it => it.CreateTime != null).Where(it => SqlFunc.ToDate(it.CreateTime).Year == DateTime.Now.Year).ToList(); + var test50 = db.Queryable().Where(it => it.CreateTime != null).Where(it => SqlFunc.ToDate(it.CreateTime).Year == SqlFunc.GetDate().Year).ToList(); + var test51 = db.Queryable().Select(it=>new { x= SqlFunc.ToDate(it.CreateTime).Year+"-" }).ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index 261232a97..ae8b118b6 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -36,6 +36,10 @@ namespace SqlSugar { ResolveValue(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle); } + else if (expression.Expression != null &&expression.Expression.Type==UtilConstants.DateType&&expression is MemberExpression && expression.Expression is MethodCallExpression) + { + ResolveDateDateByCall(parameter, isLeft, expression); + } else if (isDateDate) { ResolveDateDate(parameter, isLeft, expression); @@ -54,6 +58,7 @@ namespace SqlSugar } } + #region Resolve default private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) { @@ -164,6 +169,31 @@ namespace SqlSugar #endregion #region Resolve special member + private void ResolveDateDateByCall(ExpressionParameter parameter, bool? isLeft, MemberExpression expression) + { + var value = GetNewExpressionValue(expression.Expression); + if (expression.Member.Name == "Date") + { + AppendMember(parameter, isLeft, GetToDate(this.Context.DbMehtods.MergeString( + this.GetDateValue(value, DateType.Year), + "'-'", + this.GetDateValue(value, DateType.Month), + "'-'", + this.GetDateValue(value, DateType.Day)))); + } + else + { + foreach (int myCode in Enum.GetValues(typeof(DateType))) + { + string strName = Enum.GetName(typeof(DateType), myCode);//获取名称 + if (expression.Member.Name == strName) + { + AppendMember(parameter, isLeft, this.Context.DbMehtods.MergeString(this.GetDateValue(value, (DateType)(myCode)))); + } + } + } + } + private MemberExpression ResolveValue(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) { expression = expression.Expression as MemberExpression;