diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 3f9fb047..2711e35d 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -99,6 +99,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index 3f1299b3..c7b739ec 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -167,6 +167,12 @@ namespace FreeSql.Tests [Fact] public void Test02() { + + var dicParamslist = g.sqlite.Select().Page(1, 10) + .Where("id > @id and id > @id2 and id > @id3", + new Dictionary { ["id"] = 1, ["id2"] = 2, ["id3"] = 3 }) + .ToList(); + var list111 = g.sqlite.Select() .Page(1, 10) .ToList(a => new { Id = a.Id }) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index f0008742..a86fd69f 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -1024,13 +1024,28 @@ namespace FreeSql.Internal var type = obj.GetType(); if (type == ttype) return new[] { (T)Convert.ChangeType(obj, type) }; var ret = new List(); - var ps = type.GetPropertiesDictIgnoreCase().Values; - foreach (var p in ps) + var dic = obj as IDictionary; + if (dic != null) { - if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; - var pvalue = p.GetValue(obj, null); - if (p.PropertyType == ttype) ret.Add((T)Convert.ChangeType(pvalue, ttype)); - else ret.Add(constructorParamter(p.Name, p.PropertyType, pvalue)); + foreach (var key in dic.Keys) + { + if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{key}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; + var val = dic[key]; + var valType = val == null ? typeof(string) : val.GetType(); + if (valType == ttype) ret.Add((T)Convert.ChangeType(val, ttype)); + else ret.Add(constructorParamter(key.ToString(), valType, val)); + } + } + else + { + var ps = type.GetPropertiesDictIgnoreCase().Values; + foreach (var p in ps) + { + if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; + var pvalue = p.GetValue(obj, null); + if (p.PropertyType == ttype) ret.Add((T)Convert.ChangeType(pvalue, ttype)); + else ret.Add(constructorParamter(p.Name, p.PropertyType, pvalue)); + } } return ret.ToArray(); }