@@ -1877,41 +1877,42 @@ int LocalConcurrentDictionaryIsTypeKey(Type dictType, int level = 1)
18771877 } ) . Where ( a => a . ConcurrentDictionarys . Length > 0 ) . ToArray ( ) ;
18781878
18791879 #region pgsql poco
1880- //fsql.Aop.ParseExpression += (_, e) =>
1881- //{
1882- // //解析 POCO Jsonb a.Customer.Name
1883- // if (e.Expression is MemberExpression memExp)
1884- // {
1885- // var parentMemExps = new Stack<MemberExpression>();
1886- // parentMemExps.Push(memExp);
1887- // while (true)
1888- // {
1889- // switch (memExp.Expression.NodeType)
1890- // {
1891- // case ExpressionType.MemberAccess:
1892- // memExp = memExp.Expression as MemberExpression;
1893- // if (memExp == null) return;
1894- // parentMemExps.Push(memExp);
1895- // break;
1896- // case ExpressionType.Parameter:
1897- // var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type);
1898- // if (tb == null) return;
1899- // if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return;
1900- // if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return;
1901- // var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First();
1902- // var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName]));
1903- // result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name);
1904- // while (parentMemExps.Any())
1905- // {
1906- // memExp = parentMemExps.Pop();
1907- // result = $"{result}->>'{memExp.Member.Name}'";
1908- // }
1909- // e.Result = result;
1910- // return;
1911- // }
1912- // }
1913- // }
1914- //};
1880+ fsql . Aop . ParseExpression += ( _ , e ) =>
1881+ {
1882+ if ( e . Expression . IsParameter ( ) == false ) return ;
1883+ //解析 POCO Jsonb a.Customer.Name
1884+ if ( e . Expression is MemberExpression memExp )
1885+ {
1886+ var parentMemExps = new Stack < MemberExpression > ( ) ;
1887+ parentMemExps . Push ( memExp ) ;
1888+ while ( true )
1889+ {
1890+ switch ( memExp . Expression . NodeType )
1891+ {
1892+ case ExpressionType . MemberAccess :
1893+ memExp = memExp . Expression as MemberExpression ;
1894+ if ( memExp == null ) return ;
1895+ parentMemExps . Push ( memExp ) ;
1896+ break ;
1897+ case ExpressionType . Parameter :
1898+ var tb = fsql . CodeFirst . GetTableByEntity ( memExp . Expression . Type ) ;
1899+ if ( tb == null ) return ;
1900+ if ( tb . ColumnsByCs . TryGetValue ( parentMemExps . Pop ( ) . Member . Name , out var trycol ) == false ) return ;
1901+ if ( new [ ] { typeof ( JToken ) , typeof ( JObject ) , typeof ( JArray ) } . Contains ( trycol . Attribute . MapType . NullableTypeOrThis ( ) ) == false ) return ;
1902+ var tmpcol = tb . ColumnsByPosition . OrderBy ( a => a . Attribute . Name . Length ) . First ( ) ;
1903+ var result = e . FreeParse ( Expression . MakeMemberAccess ( memExp . Expression , tb . Properties [ tmpcol . CsName ] ) ) ;
1904+ result = result . Replace ( tmpcol . Attribute . Name , trycol . Attribute . Name ) ;
1905+ while ( parentMemExps . Any ( ) )
1906+ {
1907+ memExp = parentMemExps . Pop ( ) ;
1908+ result = $ "{ result } ->>'{ memExp . Member . Name } '";
1909+ }
1910+ e . Result = result ;
1911+ return ;
1912+ }
1913+ }
1914+ }
1915+ } ;
19151916
19161917 //void RegisterPocoType(Type pocoType)
19171918 //{
@@ -1951,7 +1952,7 @@ int LocalConcurrentDictionaryIsTypeKey(Type dictType, int level = 1)
19511952 // .ToSql();
19521953 #endregion
19531954
1954-
1955+
19551956
19561957 fsql . Aop . AuditValue += new EventHandler < FreeSql . Aop . AuditValueEventArgs > ( ( _ , e ) =>
19571958 {
0 commit comments