From 65bf4dbbdb0a929750bdc5b3a2a9add52f8f8f2d Mon Sep 17 00:00:00 2001 From: xieyidong Date: Fri, 7 Feb 2025 15:08:12 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=BE=BE=E6=A2=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=8A=E6=97=B6=E9=97=B4=E7=9B=B8?= =?UTF-8?q?=E5=87=8F=E6=B0=B8=E8=BF=9C=E8=BE=93=E5=87=BA=E4=B8=BA0?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Providers/FreeSql.Provider.Dameng/DamengExpression.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 23ed1cedd..e3e43b56e 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -435,7 +435,8 @@ namespace FreeSql.Dameng case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"((cast({left} as timestamp with time zone)-{args1})*{24 * 60 * 60})"; + //case "System.DateTime": return $"((cast({left} as timestamp with time zone)-{args1})*{24 * 60 * 60})"; + case "System.DateTime": return $"DATEDIFF(Second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; From e89d43f92c7f78fdeb4522ac52e90f1b3e3a10fe Mon Sep 17 00:00:00 2001 From: xieyidong Date: Fri, 7 Feb 2025 15:08:55 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=E6=B7=BB=E5=8A=A0=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Internal/CommonExpressionTest.cs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs b/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs index 6c9b99df3..fb0dc9b29 100644 --- a/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs @@ -301,6 +301,8 @@ FROM ( GROUP BY a.""EntityId"", b.""StartDateTime"", b.""EndDateTime"" ) a", sql); } + + public class IIFTest02Model1 { public long _Id { get; set; } @@ -324,5 +326,51 @@ FROM ( public DateTime EndDateTime { get; set; } } + + + [Fact] + public void IIFTest03() + { + var parameters = new List(); + + var fsql = g.dameng; + var sql = ""; + var startTime = DateTime.UtcNow; + //fsql.CodeFirst.SyncStructure(); + //fsql.Insert(new IIFTest03Model { StartDateTime = startTime, EndDateTime = startTime.AddHours(1) }).ExecuteAffrows(); + + var query = fsql.Select(); + + //sql = query.ToSql(model => new + //{ + // Timespan = (model.EndDateTime - model.StartDateTime).TotalSeconds, + //}); + + var result = query.ToList(model => new + { + Timespan = (model.EndDateTime - model.StartDateTime), + }); + + // sql = query.ToSql(); + // Assert.Equal($@"SELECT * + //FROM ( + // SELECT a.""EntityId"", b.""StartDateTime"" ""DateTime"", sum(((strftime('%s',case when a.""StopTime"" > b.""EndDateTime"" then b.""EndDateTime"" else a.""StopTime"" end)-strftime('%s',case when a.""StartTime"" < b.""StartDateTime"" then b.""StartDateTime"" else a.""StartTime"" end)))) ""TotalRunTime"", count(1) ""Count"" + // FROM ""IIFTest02Model1"" a + // INNER JOIN ""IIFTest02Model2"" b ON b.""StartDateTime"" = '{startTime.ToString("yyyy-MM-dd HH:mm:ss")}' AND a.""StartTime"" <= b.""EndDateTime"" AND a.""StopTime"" > b.""StartDateTime"" + // GROUP BY a.""EntityId"", b.""StartDateTime"", b.""EndDateTime"" ) a", sql); + + } + + + /// + /// 任务统计日期 + /// + public class IIFTest03Model + { + public long Id { get; set; } + public DateTime StartDateTime { get; set; } + public DateTime EndDateTime { get; set; } + + } } } From d30a82d9869adb1b637141ba14ef4c9127e16ef2 Mon Sep 17 00:00:00 2001 From: xieyidong Date: Fri, 7 Feb 2025 16:26:04 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=BE=BE=E6=A2=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=8A=E6=97=B6=E9=97=B4=E7=9B=B8?= =?UTF-8?q?=E5=87=8F=E6=B0=B8=E8=BF=9C=E8=BE=93=E5=87=BA=E4=B8=BA0?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Providers/FreeSql.Provider.Dameng/DamengExpression.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 23ed1cedd..2ced154e1 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -389,11 +389,11 @@ namespace FreeSql.Dameng Func getExp = exparg => ExpressionLambdaToSql(exparg, tsc); switch (memberName) { - case "TotalDays": return $"(cast({getExp(date1)} as timestamp with time zone)-{getExp(date2)})"; - case "TotalHours": return $"((cast({getExp(date1)} as timestamp with time zone)-{getExp(date2)})*24)"; - case "TotalMilliseconds": return $"((cast({getExp(date1)} as timestamp with time zone)-{getExp(date2)})*{24 * 60 * 60 * 1000})"; - case "TotalMinutes": return $"((cast({getExp(date1)} as timestamp with time zone)-{getExp(date2)})*{24 * 60})"; - case "TotalSeconds": return $"((cast({getExp(date1)} as timestamp with time zone)-{getExp(date2)})*{24 * 60 * 60})"; + case "TotalDays": return $"DATEDIFF(Day, {getExp(date2)}, {getExp(date1)})"; + case "TotalHours": return $"DATEDIFF(Hour, {getExp(date2)}, {getExp(date1)})"; + case "TotalMilliseconds": return $"DATEDIFF(MS, {getExp(date2)}, {getExp(date1)})"; + case "TotalMinutes": return $"DATEDIFF(Minute, {getExp(date2)}, {getExp(date1)})"; + case "TotalSeconds": return $"DATEDIFF(Second, {getExp(date2)}, {getExp(date1)})"; } return null; }