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\UserEntity.cs" />
<Compile Include="UnitTest\Models\UserRoleEntity.cs" /> <Compile Include="UnitTest\Models\UserRoleEntity.cs" />
<Compile Include="UnitTest\UCustom01.cs" /> <Compile Include="UnitTest\UCustom01.cs" />
<Compile Include="UnitTest\UCustom011.cs" />
<Compile Include="UnitTest\UCustom02.cs" /> <Compile Include="UnitTest\UCustom02.cs" />
<Compile Include="UnitTest\UCustom03.cs" /> <Compile Include="UnitTest\UCustom03.cs" />
<Compile Include="UnitTest\UCustom010.cs" /> <Compile Include="UnitTest\UCustom010.cs" />

View File

@ -31,6 +31,7 @@ namespace OrmTest
} }
public static void Init() public static void Init()
{ {
UCustom011.Init();
UCustom010.Init(); UCustom010.Init();
UCustom08.Init(); UCustom08.Init();
UCustom07.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); ResolveLength(parameter, isLeft, expression);
} }
else if (IsDateDiff(expression))
{
ResolveDateDiff(parameter, isLeft, expression);
}
else if (isHasValue) else if (isHasValue)
{ {
ResolveHasValue(parameter, expression); ResolveHasValue(parameter, expression);
@ -63,6 +67,7 @@ namespace SqlSugar
} }
#region Resolve default #region Resolve default
private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
{ {
@ -207,6 +212,43 @@ namespace SqlSugar
#endregion #endregion
#region Resolve special member #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) private void ResolveDateDateByCall(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
{ {
var value = GetNewExpressionValue(expression.Expression); var value = GetNewExpressionValue(expression.Expression);
@ -441,6 +483,17 @@ namespace SqlSugar
#endregion #endregion
#region Helper #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) private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName)
{ {
if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append))) if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append)))