From 1b0e94a9b2041ef9cec15f05c3792cfa2c943f48 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 29 Jun 2022 08:44:22 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Dto=20=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E6=9F=A5=E8=AF=A2=20Negate=20=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E8=A7=A3=E6=9E=90=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Directory.Build.props | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 23 +++++++++++++++++++ .../SqlServer/Curd/SqlServerSelectTest.cs | 19 +++++++++++++++ FreeSql/Internal/CommonExpression.cs | 4 ++-- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 0fecf6f2..1fdd13d4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -9,7 +9,7 @@ - 3.2.666-preview20220623 + 3.2.666-preview20220629 diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 4335acb5..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -74,6 +74,11 @@ Type = Update 的时候,获取更新之前的对象 + + + 实体类型 + + 实体变化记录 @@ -728,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -786,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index d57aa784..244c3dfe 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -80,6 +80,25 @@ namespace FreeSql.Tests.SqlServer public virtual ICollection Tags { get; set; } } + [Fact] + public void NegateLambda() + { + var fsql = g.sqlserver; + + var t0 = fsql.Select().ToSql(a => new + { + Id = -a.Id, + Ddd2 = -a.Ddd + }); + Assert.Equal(@"SELECT -(a.[Id]) as1, -(a.[Ddd]) as2 +FROM [Tag] a", t0); + + var t1 = fsql.Select().Where(a => -a.Id > -100).ToSql(); + Assert.Equal(@"SELECT a.[Id], a.[Parent_id], a.[Ddd], a.[Name] +FROM [Tag] a +WHERE (-(a.[Id]) > -100)", t1); + } + [Fact] public void AsSelect() { diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 1272b088..f9d3a108 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -57,7 +57,7 @@ namespace FreeSql.Internal case ExpressionType.Lambda: return ReadAnonymousField(_tables, _tableRule, field, parent, ref index, (exp as LambdaExpression)?.Body, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, isAllDtoMap); case ExpressionType.Negate: case ExpressionType.NegateChecked: - parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})"; + parent.DbField = $"-({ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, getTSC())})"; field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}")); else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(GetFieldAsCsName(parent.CsName))); @@ -787,7 +787,7 @@ namespace FreeSql.Internal return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); //bug: Where(a => a.Id = (int)enum) return ExpressionLambdaToSql(expOperand, tsc); case ExpressionType.Negate: - case ExpressionType.NegateChecked: return "-" + ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc); + case ExpressionType.NegateChecked: return $"-({ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc)})"; case ExpressionType.Constant: return formatSql((exp as ConstantExpression)?.Value, tsc.mapType, tsc.mapColumnTmp, null); case ExpressionType.Conditional: var condExp = exp as ConditionalExpression;