From d58dcd746a42178477f39213b2ec6d85de07a516 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 18 Nov 2023 03:01:47 +0800 Subject: [PATCH] Add demo --- Src/Asp.Net/MySqlTest/4_Subquery.cs | 68 +++++++++++++++++++ Src/Asp.Net/MySqlTest/MySqlTest.csproj | 1 + Src/Asp.Net/MySqlTest/Program.cs | 1 + Src/Asp.Net/PgSqlTest/4_Subquery.cs | 68 +++++++++++++++++++ Src/Asp.Net/PgSqlTest/PgSqlTest.csproj | 1 + Src/Asp.Net/PgSqlTest/Program.cs | 1 + Src/Asp.Net/SqlServerTest/4_Subquery.cs | 68 +++++++++++++++++++ Src/Asp.Net/SqlServerTest/Program.cs | 1 + .../SqlServerTest/SqlServerTest.csproj | 1 + Src/Asp.Net/SqliteTest/4_Subquery.cs | 68 +++++++++++++++++++ Src/Asp.Net/SqliteTest/Program.cs | 1 + Src/Asp.Net/SqliteTest/SqliteTest.csproj | 1 + 12 files changed, 280 insertions(+) create mode 100644 Src/Asp.Net/MySqlTest/4_Subquery.cs create mode 100644 Src/Asp.Net/PgSqlTest/4_Subquery.cs create mode 100644 Src/Asp.Net/SqlServerTest/4_Subquery.cs create mode 100644 Src/Asp.Net/SqliteTest/4_Subquery.cs diff --git a/Src/Asp.Net/MySqlTest/4_Subquery.cs b/Src/Asp.Net/MySqlTest/4_Subquery.cs new file mode 100644 index 000000000..56c6e9956 --- /dev/null +++ b/Src/Asp.Net/MySqlTest/4_Subquery.cs @@ -0,0 +1,68 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public class _4_Subquery + { + public static void Init() + { + + var db = DbHelper.GetNewDb(); + + db.CodeFirst.InitTables(); + db.DbMaintenance.TruncateTable(); + + db.Insertable(new Student() { Id = 1, SchoolId = 1 }).ExecuteCommand(); + db.Insertable(new School() { Id = 1, Name = "Harvard School" }).ExecuteCommand(); + db.Insertable(new Student() { Id = 2, SchoolId = 2 }).ExecuteCommand(); + db.Insertable(new School() { Id = 2, Name = "haha School" }).ExecuteCommand(); + + //subquery select + var result = db.Queryable() + .Select(st => new + { + SchoolName = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => s.Name), + MaxSchoolId = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => SqlFunc.AggregateMax(s.Id)), + MaxSchoolId2 = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Max(s => s.Id), + }) + .ToList(); + + //Exists: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE (EXISTS ( SELECT * FROM [School0402] [s] WHERE ( [Id] = [it].[SchoolId] ) )) + var result2 = db.Queryable() + .Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.SchoolId).Any()) + .ToList(); + + //In: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE [Id] in (SELECT [Id] FROM [School0402] [s] GROUP BY [Id]) + var result3 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().GroupBy(s => s.Id).Select(s => s.Id)) + .ToList(); + + //Equal: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE ( [Id] =(SELECT TOP 1 [s].[Id] FROM [School0402] [s] )) + var result4 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().Select(s => s.Id)) + .ToList(); + } + + [SugarTable("Student0402")] + public class Student + { + public int Id { get; set; } + public int SchoolId { get; set; } + } + [SugarTable("School0402")] + public class School + { + public int Id { get; set; } + public string Name { get; set; } + } + + } +} diff --git a/Src/Asp.Net/MySqlTest/MySqlTest.csproj b/Src/Asp.Net/MySqlTest/MySqlTest.csproj index 12522d8db..699a05bd8 100644 --- a/Src/Asp.Net/MySqlTest/MySqlTest.csproj +++ b/Src/Asp.Net/MySqlTest/MySqlTest.csproj @@ -83,6 +83,7 @@ + diff --git a/Src/Asp.Net/MySqlTest/Program.cs b/Src/Asp.Net/MySqlTest/Program.cs index 4cd80127e..8bfacd252 100644 --- a/Src/Asp.Net/MySqlTest/Program.cs +++ b/Src/Asp.Net/MySqlTest/Program.cs @@ -15,6 +15,7 @@ namespace OrmTest _2_DbFirst.Init(); _3_EasyQuery.Init(); _4_JoinQuery.Init(); + _4_Subquery.Init(); _5_PageQuery.Init(); _6_NavQuery.Init(); _7_GroupQuery.Init(); diff --git a/Src/Asp.Net/PgSqlTest/4_Subquery.cs b/Src/Asp.Net/PgSqlTest/4_Subquery.cs new file mode 100644 index 000000000..56c6e9956 --- /dev/null +++ b/Src/Asp.Net/PgSqlTest/4_Subquery.cs @@ -0,0 +1,68 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public class _4_Subquery + { + public static void Init() + { + + var db = DbHelper.GetNewDb(); + + db.CodeFirst.InitTables(); + db.DbMaintenance.TruncateTable(); + + db.Insertable(new Student() { Id = 1, SchoolId = 1 }).ExecuteCommand(); + db.Insertable(new School() { Id = 1, Name = "Harvard School" }).ExecuteCommand(); + db.Insertable(new Student() { Id = 2, SchoolId = 2 }).ExecuteCommand(); + db.Insertable(new School() { Id = 2, Name = "haha School" }).ExecuteCommand(); + + //subquery select + var result = db.Queryable() + .Select(st => new + { + SchoolName = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => s.Name), + MaxSchoolId = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => SqlFunc.AggregateMax(s.Id)), + MaxSchoolId2 = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Max(s => s.Id), + }) + .ToList(); + + //Exists: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE (EXISTS ( SELECT * FROM [School0402] [s] WHERE ( [Id] = [it].[SchoolId] ) )) + var result2 = db.Queryable() + .Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.SchoolId).Any()) + .ToList(); + + //In: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE [Id] in (SELECT [Id] FROM [School0402] [s] GROUP BY [Id]) + var result3 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().GroupBy(s => s.Id).Select(s => s.Id)) + .ToList(); + + //Equal: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE ( [Id] =(SELECT TOP 1 [s].[Id] FROM [School0402] [s] )) + var result4 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().Select(s => s.Id)) + .ToList(); + } + + [SugarTable("Student0402")] + public class Student + { + public int Id { get; set; } + public int SchoolId { get; set; } + } + [SugarTable("School0402")] + public class School + { + public int Id { get; set; } + public string Name { get; set; } + } + + } +} diff --git a/Src/Asp.Net/PgSqlTest/PgSqlTest.csproj b/Src/Asp.Net/PgSqlTest/PgSqlTest.csproj index de0359861..c09ec5872 100644 --- a/Src/Asp.Net/PgSqlTest/PgSqlTest.csproj +++ b/Src/Asp.Net/PgSqlTest/PgSqlTest.csproj @@ -69,6 +69,7 @@ + diff --git a/Src/Asp.Net/PgSqlTest/Program.cs b/Src/Asp.Net/PgSqlTest/Program.cs index 49a240df3..bb4b99e75 100644 --- a/Src/Asp.Net/PgSqlTest/Program.cs +++ b/Src/Asp.Net/PgSqlTest/Program.cs @@ -15,6 +15,7 @@ namespace OrmTest _2_DbFirst.Init(); _3_EasyQuery.Init(); _4_JoinQuery.Init(); + _4_Subquery.Init(); _5_PageQuery.Init(); _6_NavQuery.Init(); _7_GroupQuery.Init(); diff --git a/Src/Asp.Net/SqlServerTest/4_Subquery.cs b/Src/Asp.Net/SqlServerTest/4_Subquery.cs new file mode 100644 index 000000000..56c6e9956 --- /dev/null +++ b/Src/Asp.Net/SqlServerTest/4_Subquery.cs @@ -0,0 +1,68 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public class _4_Subquery + { + public static void Init() + { + + var db = DbHelper.GetNewDb(); + + db.CodeFirst.InitTables(); + db.DbMaintenance.TruncateTable(); + + db.Insertable(new Student() { Id = 1, SchoolId = 1 }).ExecuteCommand(); + db.Insertable(new School() { Id = 1, Name = "Harvard School" }).ExecuteCommand(); + db.Insertable(new Student() { Id = 2, SchoolId = 2 }).ExecuteCommand(); + db.Insertable(new School() { Id = 2, Name = "haha School" }).ExecuteCommand(); + + //subquery select + var result = db.Queryable() + .Select(st => new + { + SchoolName = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => s.Name), + MaxSchoolId = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => SqlFunc.AggregateMax(s.Id)), + MaxSchoolId2 = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Max(s => s.Id), + }) + .ToList(); + + //Exists: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE (EXISTS ( SELECT * FROM [School0402] [s] WHERE ( [Id] = [it].[SchoolId] ) )) + var result2 = db.Queryable() + .Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.SchoolId).Any()) + .ToList(); + + //In: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE [Id] in (SELECT [Id] FROM [School0402] [s] GROUP BY [Id]) + var result3 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().GroupBy(s => s.Id).Select(s => s.Id)) + .ToList(); + + //Equal: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE ( [Id] =(SELECT TOP 1 [s].[Id] FROM [School0402] [s] )) + var result4 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().Select(s => s.Id)) + .ToList(); + } + + [SugarTable("Student0402")] + public class Student + { + public int Id { get; set; } + public int SchoolId { get; set; } + } + [SugarTable("School0402")] + public class School + { + public int Id { get; set; } + public string Name { get; set; } + } + + } +} diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs index 8e0adebd4..b0ff620f6 100644 --- a/Src/Asp.Net/SqlServerTest/Program.cs +++ b/Src/Asp.Net/SqlServerTest/Program.cs @@ -14,6 +14,7 @@ namespace OrmTest _2_DbFirst.Init(); _3_EasyQuery.Init(); _4_JoinQuery.Init(); + _4_Subquery.Init(); _5_PageQuery.Init(); _6_NavQuery.Init(); _7_GroupQuery.Init(); diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj index b427a4c24..c082832fa 100644 --- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj +++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj @@ -64,6 +64,7 @@ + diff --git a/Src/Asp.Net/SqliteTest/4_Subquery.cs b/Src/Asp.Net/SqliteTest/4_Subquery.cs new file mode 100644 index 000000000..56c6e9956 --- /dev/null +++ b/Src/Asp.Net/SqliteTest/4_Subquery.cs @@ -0,0 +1,68 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public class _4_Subquery + { + public static void Init() + { + + var db = DbHelper.GetNewDb(); + + db.CodeFirst.InitTables(); + db.DbMaintenance.TruncateTable(); + + db.Insertable(new Student() { Id = 1, SchoolId = 1 }).ExecuteCommand(); + db.Insertable(new School() { Id = 1, Name = "Harvard School" }).ExecuteCommand(); + db.Insertable(new Student() { Id = 2, SchoolId = 2 }).ExecuteCommand(); + db.Insertable(new School() { Id = 2, Name = "haha School" }).ExecuteCommand(); + + //subquery select + var result = db.Queryable() + .Select(st => new + { + SchoolName = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => s.Name), + MaxSchoolId = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Select(s => SqlFunc.AggregateMax(s.Id)), + MaxSchoolId2 = SqlFunc.Subqueryable().Where(s => s.Id == st.SchoolId).Max(s => s.Id), + }) + .ToList(); + + //Exists: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE (EXISTS ( SELECT * FROM [School0402] [s] WHERE ( [Id] = [it].[SchoolId] ) )) + var result2 = db.Queryable() + .Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.SchoolId).Any()) + .ToList(); + + //In: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE [Id] in (SELECT [Id] FROM [School0402] [s] GROUP BY [Id]) + var result3 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().GroupBy(s => s.Id).Select(s => s.Id)) + .ToList(); + + //Equal: + //SELECT [Id],[SchoolId] FROM [Student0402] [it] WHERE ( [Id] =(SELECT TOP 1 [s].[Id] FROM [School0402] [s] )) + var result4 = db.Queryable() + .Where(it => it.Id == SqlFunc.Subqueryable().Select(s => s.Id)) + .ToList(); + } + + [SugarTable("Student0402")] + public class Student + { + public int Id { get; set; } + public int SchoolId { get; set; } + } + [SugarTable("School0402")] + public class School + { + public int Id { get; set; } + public string Name { get; set; } + } + + } +} diff --git a/Src/Asp.Net/SqliteTest/Program.cs b/Src/Asp.Net/SqliteTest/Program.cs index c59883ff0..5e869633a 100644 --- a/Src/Asp.Net/SqliteTest/Program.cs +++ b/Src/Asp.Net/SqliteTest/Program.cs @@ -15,6 +15,7 @@ namespace OrmTest _2_DbFirst.Init(); _3_EasyQuery.Init(); _4_JoinQuery.Init(); + _4_Subquery.Init(); _5_PageQuery.Init(); _6_NavQuery.Init(); _7_GroupQuery.Init(); diff --git a/Src/Asp.Net/SqliteTest/SqliteTest.csproj b/Src/Asp.Net/SqliteTest/SqliteTest.csproj index 1015b9ba7..9d5326bef 100644 --- a/Src/Asp.Net/SqliteTest/SqliteTest.csproj +++ b/Src/Asp.Net/SqliteTest/SqliteTest.csproj @@ -49,6 +49,7 @@ +