From 6f52ec990b94bd15e68953e5cc57dc874df9cf19 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 17 Jan 2023 20:50:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8C=96=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=20ExpandoObject=E6=94=AF=E6=8C=81=20#1403?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index b7ea9fd5..dc178ef9 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -1433,14 +1433,25 @@ namespace FreeSql.Internal var type = obj.GetType(); if (ttype.IsAssignableFrom(type)) return new[] { (T)obj }; var ret = new List(); - var dic = obj as IDictionary; - if (dic != null) + if (obj is IDictionary dic1) { - foreach (var key in dic.Keys) + foreach (var key in dic1.Keys) + { + var dbkey = key.TrimStart('@', '?', ':'); + if (isCheckSql && string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{dbkey}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; + var val = dic1[key]; + var valType = val == null ? typeof(string) : val.GetType(); + if (ttype.IsAssignableFrom(valType)) ret.Add((T)val); + else ret.Add(constructorParamter(dbkey, valType, val)); + } + } + else if (obj is IDictionary dic2) + { + foreach (var key in dic2.Keys) { var dbkey = key.ToString().TrimStart('@', '?', ':'); if (isCheckSql && string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{dbkey}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; - var val = dic[key]; + var val = dic2[key]; var valType = val == null ? typeof(string) : val.GetType(); if (ttype.IsAssignableFrom(valType)) ret.Add((T)val); else ret.Add(constructorParamter(dbkey, valType, val));