- 修复 Dto 映射查询 Negate 表达式解析 bug;

This commit is contained in:
2881099 2022-06-29 08:44:22 +08:00
parent 9ba6148329
commit 1b0e94a9b2
4 changed files with 45 additions and 3 deletions

View File

@ -9,7 +9,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Version>3.2.666-preview20220623</Version> <Version>3.2.666-preview20220629</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -74,6 +74,11 @@
Type = Update 的时候,获取更新之前的对象 Type = Update 的时候,获取更新之前的对象
</summary> </summary>
</member> </member>
<member name="P:FreeSql.DbContext.EntityChangeReport.ChangeInfo.EntityType">
<summary>
实体类型
</summary>
</member>
<member name="P:FreeSql.DbContext.EntityChangeReport.Report"> <member name="P:FreeSql.DbContext.EntityChangeReport.Report">
<summary> <summary>
实体变化记录 实体变化记录
@ -728,6 +733,15 @@
<param name="modelBuilder"></param> <param name="modelBuilder"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
<summary>
根据Assembly扫描所有继承IEntityTypeConfiguration&lt;T&gt;的配置类
</summary>
<param name="codeFirst"></param>
<param name="assembly"></param>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)"> <member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary> <summary>
创建普通数据上下文档对象 创建普通数据上下文档对象
@ -786,5 +800,14 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -80,6 +80,25 @@ namespace FreeSql.Tests.SqlServer
public virtual ICollection<Tag> Tags { get; set; } public virtual ICollection<Tag> Tags { get; set; }
} }
[Fact]
public void NegateLambda()
{
var fsql = g.sqlserver;
var t0 = fsql.Select<Tag>().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<Tag>().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] [Fact]
public void AsSelect() public void AsSelect()
{ {

View File

@ -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.Lambda: return ReadAnonymousField(_tables, _tableRule, field, parent, ref index, (exp as LambdaExpression)?.Body, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, isAllDtoMap);
case ExpressionType.Negate: case ExpressionType.Negate:
case ExpressionType.NegateChecked: case ExpressionType.NegateChecked:
parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})"; parent.DbField = $"-({ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, getTSC())})";
field.Append(", ").Append(parent.DbField); field.Append(", ").Append(parent.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}")); 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))); 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 formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); //bug: Where(a => a.Id = (int)enum)
return ExpressionLambdaToSql(expOperand, tsc); return ExpressionLambdaToSql(expOperand, tsc);
case ExpressionType.Negate: 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.Constant: return formatSql((exp as ConstantExpression)?.Value, tsc.mapType, tsc.mapColumnTmp, null);
case ExpressionType.Conditional: case ExpressionType.Conditional:
var condExp = exp as ConditionalExpression; var condExp = exp as ConditionalExpression;