From b5efb387bd3e60014c12315308ef9ef6b657bfc4 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Wed, 13 Nov 2019 20:21:49 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=8C=E5=96=84=20=E6=89=80=E6=9C=89?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8C=96=20object=20parms=20=E5=8F=AF?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8=20IDictionary=20=E7=B1=BB=E5=9E=8B=E4=BC=A0?=
=?UTF-8?q?=E5=85=A5=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 7 ++++++
FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 6 ++++++
FreeSql/Internal/UtilsExpressionTree.cs | 27 ++++++++++++++++++------
3 files changed, 34 insertions(+), 6 deletions(-)
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();
}