diff --git a/Src/Asp.Net/PgSqlTest/Demo/Demo1_Queryable.cs b/Src/Asp.Net/PgSqlTest/Demo/Demo1_Queryable.cs index 66c0c5028..4475dabba 100644 --- a/Src/Asp.Net/PgSqlTest/Demo/Demo1_Queryable.cs +++ b/Src/Asp.Net/PgSqlTest/Demo/Demo1_Queryable.cs @@ -42,6 +42,13 @@ namespace OrmTest var getByWhere2 = db.Queryable().Where(it => it.Id == DateTime.Now.Year).ToList(); var getByFuns = db.Queryable().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList(); var getByFuns2 = db.Queryable().GroupBy(it => it.Name).Select(it => SqlFunc.AggregateDistinctCount(it.Price)).ToList(); + var btime = Convert.ToDateTime("2021-1-1"); + var etime = Convert.ToDateTime("2022-1-12"); + var test01 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Year,btime, etime)).ToList(); + var test02 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Day, btime, etime)).ToList(); + var test03 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Month, btime, etime)).ToList(); + var test04 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Second, DateTime.Now, DateTime.Now.AddMinutes(2))).ToList(); + Console.WriteLine("#### Examples End ####"); Console.WriteLine("#### Examples End ####"); } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs index 6b3adabb6..4a130ab10 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs @@ -136,6 +136,7 @@ namespace SqlSugar else if (type!=null&&type.IsEnum()) { this.DbType = System.Data.DbType.Int64; + this.Value = Convert.ToInt64(Value); } } diff --git a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs index 9158581bd..98742a969 100644 --- a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs @@ -133,6 +133,32 @@ namespace SqlSugar } public class PostgreSQLMethod : DefaultDbMethod, IDbMethods { + public override string DateDiff(MethodCallExpressionModel model) + { + var parameter = (DateType)(Enum.Parse(typeof(DateType), model.Args[0].MemberValue.ObjToString())); + var begin = model.Args[1].MemberName; + var end = model.Args[2].MemberName; + switch (parameter) + { + case DateType.Year: + return $" ( DATE_PART('Year', {end} ) - DATE_PART('Year', {begin}) )"; + case DateType.Month: + return $" ( ( DATE_PART('Year', {end} ) - DATE_PART('Year', {begin}) ) * 12 + (DATE_PART('month', {end}) - DATE_PART('month', {begin})) )"; + case DateType.Day: + return $" ( DATE_PART('day', {end} - {begin}) )"; + case DateType.Hour: + return $" ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) )"; + case DateType.Minute: + return $" ( ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} ) )"; + case DateType.Second: + return $" ( ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} )"; + case DateType.Millisecond: + break; + default: + break; + } + throw new Exception(parameter + " datediff no support"); + } public override string IIF(MethodCallExpressionModel model) { var parameter = model.Args[0];