From 58be3b77f35ab2ac9dc2f9b234e1e849336d1424 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 9 Nov 2020 00:57:53 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20MapRead=20=E5=AF=B9=20?= =?UTF-8?q?NULL=20=E5=AD=97=E6=AE=B5=E7=9A=84=E5=A4=84=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest4.cs | 35 ++++++++++++++++++++++++ FreeSql/Internal/CommonExpression.cs | 4 +-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs index d369cc98..4538707a 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs @@ -10,6 +10,41 @@ namespace FreeSql.Tests { public class UnitTest4 { + [Fact] + public void LeftJoinNull01() + { + var fsql = g.sqlite; + fsql.Delete().Where("1=1").ExecuteAffrows(); + fsql.Delete().Where("1=1").ExecuteAffrows(); + + var item = new leftjoin_null01 { name = "xx01" }; + fsql.Insert(item).ExecuteAffrows(); + + var sel1 = fsql.Select() + .LeftJoin((a, b) => a.id == b.null01_id) + .First((a, b) => new + { + a.id, + a.name, + id2 = (Guid?)b.id, + time2 = (DateTime?)b.time + }); + Assert.Null(sel1.id2); + Assert.Null(sel1.time2); + } + + class leftjoin_null01 + { + public Guid id { get; set; } + public string name { get; set; } + } + class leftjoin_null02 + { + public Guid id { get; set; } + public Guid null01_id { get; set; } + public DateTime time { get; set; } + } + [Fact] public void TestHzyTuple() diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 07739905..0952cf1f 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -178,14 +178,14 @@ namespace FreeSql.Internal parent.Property = parentProp; //若不加此行,会引用 GroupBy(..).ToList(a => new Dto { key = a.Key }) null 错误,CopyTo 之后 Property 变为 null return false; } - parent.CsType = exp.Type; + if (parent.CsType == null) parent.CsType = exp.Type; parent.DbField = ExpressionLambdaToSql(exp, getTSC()); field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}")); else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false && parent.DbField.EndsWith(_common.QuoteSqlName(parent.CsName), StringComparison.CurrentCultureIgnoreCase) == false //DbField 和 CsName 相同的时候,不处理 ) field.Append(_common.FieldAsAlias(parent.CsName)); - parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type; + if (parent.MapType == null) parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type; return false; } return false;