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;