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();
}