From 5f645f194f0c384132bbbd943803cfd7e3a16c61 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Thu, 13 Aug 2020 10:25:01 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=8C=E5=96=84=20ISelect.WithSql=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E6=94=AF=E6=8C=81=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8C=96=20#413=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SqlServer/Curd/SqlServerSelectTest.cs | 13 +- FreeSql/FreeSql.xml | 158 +----------------- FreeSql/Interface/Curd/ISelect/ISelect1.cs | 7 +- .../SelectProvider/Select1Provider.cs | 3 +- 4 files changed, 23 insertions(+), 158 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index 03e49134..2c73658e 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -1043,14 +1043,23 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title] }); var testUnionAll = select - .WithSql("SELECT * FROM [tb_topic22] where id = 10") - .WithSql("SELECT * FROM [tb_topic22] where id = 11") + .WithSql("SELECT * FROM [tb_topic22] where id = @id1", new { id1 = 10 }) + .WithSql("SELECT * FROM [tb_topic22] where id = @id2", new { id2 = 11 }) .ToSql(a => new { a.Id, a.Clicks }); + var testUnionAllToList = select + .WithSql("SELECT * FROM [tb_topic22] where id = @id1", new { id1 = 10 }) + .WithSql("SELECT * FROM [tb_topic22] where id = @id2", new { id2 = 11 }) + .ToList(a => new + { + a.Id, + a.Clicks + }); + var testUnionAll2 = g.sqlite.Select() .WithSql("SELECT * FROM [tb_topic22] where id = 10") .WithSql("SELECT * FROM [tb_topic22] where id = 11") diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 91e5723b..1c323bd5 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1983,12 +1983,15 @@ 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?) - + 实现 select .. from ( select ... from t ) a 这样的功能 - 使用 AsTable 方法也可以达到效果 + 使用 AsTable 方法也可以达到效果 + 示例:WithSql("select * from id=?id", new { id = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> SQL语句 + 参数 @@ -2594,145 +2597,6 @@ - - - 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 - - - - - - - - - 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - 查询 - - - - - - - 查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 查询 - - - - - - - 查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 查询 - - - - - - - 查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 在【主库】执行 - - - - - - - - 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 在【主库】执行 - - - - - - - - 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - 执行SQL返回对象集合,Query<User, Address>("select * from user where age > ?age; select * from address", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - 可自定义解析表达式 @@ -3419,12 +3283,6 @@ 超时 - - - 获取资源 - - - 使用完毕后,归还资源 @@ -3495,12 +3353,6 @@ 资源对象 - - - 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 - - 资源对象 - 归还对象给对象池的时候触发 diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs index acf1bcf3..1d44bfe6 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs @@ -373,10 +373,13 @@ namespace FreeSql /// /// 实现 select .. from ( select ... from t ) a 这样的功能 - /// 使用 AsTable 方法也可以达到效果 + /// 使用 AsTable 方法也可以达到效果 + /// 示例:WithSql("select * from id=?id", new { id = 1 }) + /// 提示:parms 参数还可以传 Dictionary<string, object> /// /// SQL语句 + /// 参数 /// - ISelect WithSql(string sql); + ISelect WithSql(string sql, object parms = null); } } \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 1a9c1fcf..4519bad1 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -256,13 +256,14 @@ namespace FreeSql.Internal.CommonProvider return this; } - public ISelect WithSql(string sql) + public ISelect WithSql(string sql, object parms = null) { this.AsTable((type, old) => { if (type == _tables.First().Table?.Type) return $"( {sql} )"; return old; }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms)); return this; }