Support (date1-date2).ToTalDays hours minutes

This commit is contained in:
sunkaixuan 2022-03-23 10:32:39 +08:00
parent af39446253
commit ebe0a7b31b
4 changed files with 87 additions and 0 deletions

View File

@ -100,6 +100,7 @@
<Compile Include="UnitTest\Models\UserEntity.cs" />
<Compile Include="UnitTest\Models\UserRoleEntity.cs" />
<Compile Include="UnitTest\UCustom01.cs" />
<Compile Include="UnitTest\UCustom011.cs" />
<Compile Include="UnitTest\UCustom02.cs" />
<Compile Include="UnitTest\UCustom03.cs" />
<Compile Include="UnitTest\UCustom010.cs" />

View File

@ -31,6 +31,7 @@ namespace OrmTest
}
public static void Init()
{
UCustom011.Init();
UCustom010.Init();
UCustom08.Init();
UCustom07.Init();

View File

@ -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<Order>().Where(it => (it.CreateTime - SqlFunc.GetDate()).TotalDays > 1).ToList();
var x1=db.Queryable<Order>().Select(it => (DateTime.Now - SqlFunc.GetDate().AddYears(-1)).TotalDays).ToList();
var x2 = db.Queryable<Order>().Select(it => (DateTime.Now - SqlFunc.GetDate().AddDays(-1)).TotalHours).ToList();
var x3 = db.Queryable<Order>().Select(it => (DateTime.Now - SqlFunc.GetDate().AddHours(-1)).TotalMinutes).ToList();
var x4 = db.Queryable<Order>().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");
}
}
}
}

View File

@ -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<DateType>())
{
if (expression.Member.Name.ToLower().Contains(item.Key.ToLower()))
{
dateType = item.Value;
break;
}
}
var result = this.Context.DbMehtods.DateDiff(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
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)))