From 3d80bc0c4b9ee25f6d50d44b11074525def854ec Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 20 Jun 2020 11:07:41 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20[JsonMap]=20=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E5=9C=A8=20lambda=20=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E4=B8=AD=E8=A7=A3=E6=9E=90=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 5 +++++ FreeSql/Internal/CommonExpression.cs | 30 ++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index d67d7994..b08dd7f2 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -141,6 +141,11 @@ namespace base_entity new S_SysConfig { Name = "testkey22", Config = new TestConfig { clicks = 22, title = "testtitle22" }, Config2 = new TestConfig { clicks = 11, title = "testtitle11" } }.Save(); new S_SysConfig { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" }, Config2 = new TestConfig { clicks = 11, title = "testtitle11" } }.Save(); var testconfigs11 = S_SysConfig.Select.ToList(); + var testconfigs111 = S_SysConfig.Select.ToList(a => a.Name); + var testconfigs112 = S_SysConfig.Select.ToList(a => a.Config); + var testconfigs1122 = S_SysConfig.Select.ToList(a => new { a.Name, a.Config }); + var testconfigs113 = S_SysConfig.Select.ToList(a => a.Config2); + var testconfigs1133 = S_SysConfig.Select.ToList(a => new { a.Name, a.Config2 }); var repo = BaseEntity.Orm.Select().Limit(10).ToList(); diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 0cafcea1..6507bd24 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -80,8 +80,15 @@ namespace FreeSql.Internal return false; case ExpressionType.Parameter: case ExpressionType.MemberAccess: - if (_common.GetTableByEntity(exp.Type) != null) - { //加载表所有字段 + if (_common.GetTableByEntity(exp.Type) != null && + //判断 [JsonMap] 并非导航对象 + (exp.NodeType == ExpressionType.Parameter || exp is MemberExpression expMem && ( + _common.GetTableByEntity(expMem.Expression.Type)?.ColumnsByCs.ContainsKey(expMem.Member.Name) == false || + expMem.Expression.NodeType == ExpressionType.Parameter && expMem.Expression.Type.IsAnonymousType()) //<>h__TransparentIdentifier 是 Linq To Sql 的类型判断,此时为匿名类型 + ) + ) + { + //加载表所有字段 var map = new List(); ExpressionSelectColumn_MemberAccess(_tables, map, SelectTableInfoType.From, exp, true, getSelectGroupingMapString); var tb = parent.Table = map.First().Table.Table; @@ -1272,9 +1279,24 @@ namespace FreeSql.Internal var exp2Type = exp2.Type; if (exp2Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) exp2Type = exp2Type.GetGenericArguments().LastOrDefault() ?? exp2.Type; - var tb2tmp = _common.GetTableByEntity(exp2Type); var mp2 = exp2 as MemberExpression; if (mp2?.Member.Name == "Key" && mp2.Expression.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) continue; + + ColumnInfo col2 = null; + if (tb2?.ColumnsByCs.TryGetValue(mp2.Member.Name, out col2) == true) + { + if (tsc._selectColumnMap != null && find2 != null) + { + tsc._selectColumnMap.Add(new SelectColumnInfo { Table = find2, Column = col2 }); + return ""; + } + name2 = col2.Attribute.Name; + tsc.SetMapColumnTmp(col2); + break; + } + //判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs + + var tb2tmp = _common.GetTableByEntity(exp2Type); if (tb2tmp != null) { if (exp2.NodeType == ExpressionType.Parameter) @@ -1317,7 +1339,7 @@ namespace FreeSql.Internal throw new ArgumentException($"{tb2.DbName}.{mp2.Member.Name} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2.Member.Name}) 中使用,请移步参考 IncludeMany 文档。"); throw new ArgumentException($"{tb2.DbName} 找不到列 {mp2.Member.Name}"); } - var col2 = tb2.ColumnsByCs[mp2.Member.Name]; + col2 = tb2.ColumnsByCs[mp2.Member.Name]; if (tsc._selectColumnMap != null && find2 != null) { tsc._selectColumnMap.Add(new SelectColumnInfo { Table = find2, Column = col2 });