diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
index dfe75fe19..9a0d4c3b3 100644
--- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
+++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj
@@ -100,6 +100,7 @@
+
diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
index 83c537dd6..d7a5ae348 100644
--- a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
+++ b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs
@@ -31,6 +31,7 @@ namespace OrmTest
}
public static void Init()
{
+ UCustom011.Init();
UCustom010.Init();
UCustom08.Init();
UCustom07.Init();
diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom011.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom011.cs
new file mode 100644
index 000000000..4766376f9
--- /dev/null
+++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom011.cs
@@ -0,0 +1,32 @@
+using OrmTest.UnitTest.Models;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OrmTest
+{
+ public class UCustom011
+ {
+ public static void Init()
+ {
+ var db = NewUnitTest.Db;
+ db.Queryable().Where(it => (it.CreateTime - SqlFunc.GetDate()).TotalDays > 1).ToList();
+ var x1=db.Queryable().Select(it => (DateTime.Now - SqlFunc.GetDate().AddYears(-1)).TotalDays).ToList();
+ var x2 = db.Queryable().Select(it => (DateTime.Now - SqlFunc.GetDate().AddDays(-1)).TotalHours).ToList();
+ var x3 = db.Queryable().Select(it => (DateTime.Now - SqlFunc.GetDate().AddHours(-1)).TotalMinutes).ToList();
+ var x4 = db.Queryable().Select(it => (DateTime.Now - SqlFunc.GetDate().AddMinutes(-1)).TotalSeconds).ToList();
+ if (x1.Any())
+ {
+ Check.Exception(x1.First()!=365, "unit error . UCustom011");
+ Check.Exception(x2.First() != 24, "unit error . UCustom011");
+ Check.Exception(x3.First() != 60, "unit error . UCustom011");
+ Check.Exception(x4.First() != 60, "unit error . UCustom011");
+ }
+ }
+
+
+ }
+}
diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs
index 762ad62ed..a950234ea 100644
--- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs
+++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs
@@ -20,6 +20,10 @@ namespace SqlSugar
{
ResolveLength(parameter, isLeft, expression);
}
+ else if (IsDateDiff(expression))
+ {
+ ResolveDateDiff(parameter, isLeft, expression);
+ }
else if (isHasValue)
{
ResolveHasValue(parameter, expression);
@@ -63,6 +67,7 @@ namespace SqlSugar
}
+
#region Resolve default
private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
{
@@ -207,6 +212,43 @@ namespace SqlSugar
#endregion
#region Resolve special member
+ private void ResolveDateDiff(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
+ {
+ var binaryExp=expression.Expression as BinaryExpression;
+ var beginExp = binaryExp.Right;
+ var endExp = binaryExp.Left;
+
+ var dateType = DateType.Day;
+ var begin = GetNewExpressionValue(beginExp);
+ var end = GetNewExpressionValue(endExp);
+
+ foreach (var item in UtilMethods.EnumToDictionary())
+ {
+ if (expression.Member.Name.ToLower().Contains(item.Key.ToLower()))
+ {
+ dateType = item.Value;
+ break;
+ }
+ }
+ var result = this.Context.DbMehtods.DateDiff(new MethodCallExpressionModel()
+ {
+ Args = new List() {
+ new MethodCallExpressionArgs(){
+ MemberName=dateType,
+ MemberValue=dateType
+ },
+ new MethodCallExpressionArgs(){
+ MemberName=begin,
+ MemberValue=begin
+ },
+ new MethodCallExpressionArgs(){
+ MemberName=end,
+ MemberValue=end
+ }
+ }
+ }); ;
+ base.AppendMember(parameter, isLeft, result);
+ }
private void ResolveDateDateByCall(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
{
var value = GetNewExpressionValue(expression.Expression);
@@ -441,6 +483,17 @@ namespace SqlSugar
#endregion
#region Helper
+ private static bool IsDateDiff(MemberExpression expression)
+ {
+ return
+ expression.Expression!=null&&
+ expression.Expression is BinaryExpression &&
+ expression.Expression.Type == UtilConstants.TimeSpanType&&
+ expression.Member.Name.StartsWith("Total")&&
+ expression.Member.Name.EndsWith("s")
+ ;
+ }
+
private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName)
{
if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append)))