@@ -80,8 +80,15 @@ public bool ReadAnonymousField(List<SelectTableInfo> _tables, StringBuilder fiel
8080 return false ;
8181 case ExpressionType . Parameter :
8282 case ExpressionType . MemberAccess :
83- if ( _common . GetTableByEntity ( exp . Type ) != null )
84- { //加载表所有字段
83+ if ( _common . GetTableByEntity ( exp . Type ) != null &&
84+ //判断 [JsonMap] 并非导航对象
85+ ( exp . NodeType == ExpressionType . Parameter || exp is MemberExpression expMem && (
86+ _common . GetTableByEntity ( expMem . Expression . Type ) ? . ColumnsByCs . ContainsKey ( expMem . Member . Name ) == false ||
87+ expMem . Expression . NodeType == ExpressionType . Parameter && expMem . Expression . Type . IsAnonymousType ( ) ) //<>h__TransparentIdentifier 是 Linq To Sql 的类型判断,此时为匿名类型
88+ )
89+ )
90+ {
91+ //加载表所有字段
8592 var map = new List < SelectColumnInfo > ( ) ;
8693 ExpressionSelectColumn_MemberAccess ( _tables , map , SelectTableInfoType . From , exp , true , getSelectGroupingMapString ) ;
8794 var tb = parent . Table = map . First ( ) . Table . Table ;
@@ -1272,9 +1279,24 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
12721279
12731280 var exp2Type = exp2 . Type ;
12741281 if ( exp2Type . FullName . StartsWith ( "FreeSql.ISelectGroupingAggregate`" ) ) exp2Type = exp2Type . GetGenericArguments ( ) . LastOrDefault ( ) ?? exp2 . Type ;
1275- var tb2tmp = _common . GetTableByEntity ( exp2Type ) ;
12761282 var mp2 = exp2 as MemberExpression ;
12771283 if ( mp2 ? . Member . Name == "Key" && mp2 . Expression . Type . FullName . StartsWith ( "FreeSql.ISelectGroupingAggregate`" ) ) continue ;
1284+
1285+ ColumnInfo col2 = null ;
1286+ if ( tb2 ? . ColumnsByCs . TryGetValue ( mp2 . Member . Name , out col2 ) == true )
1287+ {
1288+ if ( tsc . _selectColumnMap != null && find2 != null )
1289+ {
1290+ tsc . _selectColumnMap . Add ( new SelectColumnInfo { Table = find2 , Column = col2 } ) ;
1291+ return "" ;
1292+ }
1293+ name2 = col2 . Attribute . Name ;
1294+ tsc . SetMapColumnTmp ( col2 ) ;
1295+ break ;
1296+ }
1297+ //判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs
1298+
1299+ var tb2tmp = _common . GetTableByEntity ( exp2Type ) ;
12781300 if ( tb2tmp != null )
12791301 {
12801302 if ( exp2 . NodeType == ExpressionType . Parameter )
@@ -1317,7 +1339,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
13171339 throw new ArgumentException ( $ "{ tb2 . DbName } .{ mp2 . Member . Name } 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{ mp2 . Member . Name } ) 中使用,请移步参考 IncludeMany 文档。") ;
13181340 throw new ArgumentException ( $ "{ tb2 . DbName } 找不到列 { mp2 . Member . Name } ") ;
13191341 }
1320- var col2 = tb2 . ColumnsByCs [ mp2 . Member . Name ] ;
1342+ col2 = tb2 . ColumnsByCs [ mp2 . Member . Name ] ;
13211343 if ( tsc . _selectColumnMap != null && find2 != null )
13221344 {
13231345 tsc . _selectColumnMap . Add ( new SelectColumnInfo { Table = find2 , Column = col2 } ) ;
0 commit comments