From 198e027c48a7a38ffa896ee85ec5b037d02d5a92 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 31 Mar 2022 16:29:01 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20MapType=20=E5=A4=8D?= =?UTF-8?q?=E6=9D=82=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=A0=91=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=20bug=EF=BC=9B#1062?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest5.cs | 21 +++++++++++++++++++ .../Internal/CommonProvider/UpdateProvider.cs | 6 ++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs index 7d4ec648..a1db0c8d 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs @@ -16,6 +16,27 @@ namespace FreeSql.Tests { public class UnitTest5 { + // DTO + public class TestDto + { + public decimal ratio { get; set; } + public bool is_lock { get; set; } + } + [Fact] + public void TestDoubleWhereBug() + { + var fsql = g.mysql; + // 测试例子 + var test = new TestDto(); + test.ratio = 2.1M; + var sql = fsql.Update().Set(m => new TestDto + { + is_lock = test.ratio < 1 //这里生成的SQL语句有问题 ratio = 0.9 或 1.9 或 2.1 等等都是生成的是1 + }).Where(m => test.ratio < 1).ToSql(); + Assert.Equal(@"UPDATE TestDto SET is_lock = 2.1 < 1 +WHERE (2.1 < 1)", sql); + } + [Fact] public void TestLambdaParameterWhereIn() { diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index cd1bb84d..ea98dc63 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -526,7 +526,8 @@ namespace FreeSql.Internal.CommonProvider var memberName = initExp.Bindings[a].Member.Name; if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}"); - var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { isQuoteName = true, mapType = col.Attribute.MapType }); + var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { isQuoteName = true, + mapType = initAssignExp.Expression is BinaryExpression ? null : col.Attribute.MapType }); _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); } } @@ -540,7 +541,8 @@ namespace FreeSql.Internal.CommonProvider var memberName = newExp.Members[a].Name; if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}"); - var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { isQuoteName = true, mapType = col.Attribute.MapType }); + var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { isQuoteName = true, + mapType = newExp.Arguments[a] is BinaryExpression ? null : col.Attribute.MapType }); _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); } }