- 优化 string[].Any(..) 表达式树解析;ReplaceParameterVisitor

This commit is contained in:
2881099 2022-11-23 12:27:28 +08:00
parent e66c55569d
commit 6b9aa9dcef
2 changed files with 41 additions and 25 deletions

View File

@ -404,31 +404,31 @@ namespace base_entity
var sql2rscs = Utils.ReplaceSqlConstString("'', 'SARTEN ACERO VITR.18CM''''GRAFIT''''', 'a",
pams, "@lantin1");
using (IFreeSql client = CreateInstance(@"Driver={Microsoft Access Driver (*.mdb)};DBQ=d:/accdb/2007.accdb", DataType.Odbc))
{
client.Aop.AuditValue += (_, e) =>
{
if (e.Object is Dictionary<string, object> dict)
{
foreach(var key in dict.Keys)
{
var val = dict[key];
if (val == DBNull.Value) dict[key] = null;
}
e.ObjectAuditBreak = true;
}
};
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("ExpNo", "RSP0950008");
data.Add("SPoint", "RSP0950004");
data.Add("EPoint", "RSP095000440");
data.Add("PType", "RS");
data.Add("GType", "窨井轮廓线");
data.Add("LineStyle", 2);
data.Add("Memo", DBNull.Value);
data.Add("ClassID", DBNull.Value);
var kdkdksqlxx = client.InsertDict(data).AsTable("FZLINE").ToSql();
}
//using (IFreeSql client = CreateInstance(@"Driver={Microsoft Access Driver (*.mdb)};DBQ=d:/accdb/2007.accdb", DataType.Odbc))
//{
// client.Aop.AuditValue += (_, e) =>
// {
// if (e.Object is Dictionary<string, object> dict)
// {
// foreach(var key in dict.Keys)
// {
// var val = dict[key];
// if (val == DBNull.Value) dict[key] = null;
// }
// e.ObjectAuditBreak = true;
// }
// };
// Dictionary<string, object> data = new Dictionary<string, object>();
// data.Add("ExpNo", "RSP0950008");
// data.Add("SPoint", "RSP0950004");
// data.Add("EPoint", "RSP095000440");
// data.Add("PType", "RS");
// data.Add("GType", "窨井轮廓线");
// data.Add("LineStyle", 2);
// data.Add("Memo", DBNull.Value);
// data.Add("ClassID", DBNull.Value);
// var kdkdksqlxx = client.InsertDict(data).AsTable("FZLINE").ToSql();
//}
BaseModel<User1>.fsql = 1;
@ -487,6 +487,16 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
//Func<string> getName1 = () => "xxx";
//fsql.GlobalFilter.Apply<User1>("fil1", a => a.Nickname == getName1());
//var gnsql2 = fsql.Select<User1>().ToSql();
var strs = new string[] { "a", "b", "c" };
var strssql1 = fsql.Select<User1>().Where(a => strs.Any(b => b == a.Nickname)).ToSql();
var strssql2 = fsql.Select<User1>().Where(a => strs.Any(b => a.Nickname.Contains(b))).ToSql();
var objs = new UserGroup[] { new UserGroup { GroupName = "a", Id = 1 }, new UserGroup { GroupName = "b", Id = 2 }, new UserGroup { GroupName = "c", Id = 3 } };
var objssql1 = fsql.Select<User1>().Where(a => objs.Any(b => b.GroupName == a.Nickname && b.Id == a.GroupId)).ToSql();
var tttsqlext01 = fsql.Select<User1>().ToSql(a => new
{

View File

@ -2286,6 +2286,12 @@ namespace FreeSql.Internal
return Expression.Property(_replaceExp, node.Member.Name);
return base.VisitMember(node);
}
protected override Expression VisitParameter(ParameterExpression node)
{
if (node == oldParameter)
return _replaceExp;
return base.VisitParameter(node);
}
}
public class ReplaceHzyTupleToMultiParam : ExpressionVisitor