From a4dca345474363939d855c52bac72bf831cacb0f Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 10 Nov 2023 00:56:30 +0800 Subject: [PATCH] update demo --- Examples/base_entity/Program.cs | 73 +++++++++++----------- FreeSql.Tests/FreeSql.Tests/Issues/1549.cs | 1 + 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 07395125..1e1add2b 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -1877,41 +1877,42 @@ var sql11111 = fsql.Select() }).Where(a => a.ConcurrentDictionarys.Length > 0).ToArray(); #region pgsql poco - //fsql.Aop.ParseExpression += (_, e) => - //{ - // //解析 POCO Jsonb a.Customer.Name - // if (e.Expression is MemberExpression memExp) - // { - // var parentMemExps = new Stack(); - // parentMemExps.Push(memExp); - // while (true) - // { - // switch (memExp.Expression.NodeType) - // { - // case ExpressionType.MemberAccess: - // memExp = memExp.Expression as MemberExpression; - // if (memExp == null) return; - // parentMemExps.Push(memExp); - // break; - // case ExpressionType.Parameter: - // var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type); - // if (tb == null) return; - // if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return; - // if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return; - // var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First(); - // var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName])); - // result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name); - // while (parentMemExps.Any()) - // { - // memExp = parentMemExps.Pop(); - // result = $"{result}->>'{memExp.Member.Name}'"; - // } - // e.Result = result; - // return; - // } - // } - // } - //}; + fsql.Aop.ParseExpression += (_, e) => + { + if (e.Expression.IsParameter() == false) return; + //解析 POCO Jsonb a.Customer.Name + if (e.Expression is MemberExpression memExp) + { + var parentMemExps = new Stack(); + parentMemExps.Push(memExp); + while (true) + { + switch (memExp.Expression.NodeType) + { + case ExpressionType.MemberAccess: + memExp = memExp.Expression as MemberExpression; + if (memExp == null) return; + parentMemExps.Push(memExp); + break; + case ExpressionType.Parameter: + var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type); + if (tb == null) return; + if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return; + if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return; + var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First(); + var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName])); + result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name); + while (parentMemExps.Any()) + { + memExp = parentMemExps.Pop(); + result = $"{result}->>'{memExp.Member.Name}'"; + } + e.Result = result; + return; + } + } + } + }; //void RegisterPocoType(Type pocoType) //{ @@ -1951,7 +1952,7 @@ var sql11111 = fsql.Select() // .ToSql(); #endregion - + fsql.Aop.AuditValue += new EventHandler((_, e) => { diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/1549.cs b/FreeSql.Tests/FreeSql.Tests/Issues/1549.cs index 5b89513a..d013d08e 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/1549.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/1549.cs @@ -20,6 +20,7 @@ namespace FreeSql.Tests.Issues RegisterPocoType(typeof(Customer)); //注删 POCO 类型 fsql.Aop.ParseExpression += (_, e) => { + if (e.Expression.IsParameter() == false) return; //解析 POCO Jsonb a.Customer.Name if (e.Expression is MemberExpression memExp) {