From fe5b98509b152607cb603ccfa22425eab60a7ca5 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 17 Dec 2019 22:08:12 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20ISelect.ToSql=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=88=AB=E5=90=8D=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=B8=BA=20AsIndex=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=20AsProperty=EF=BC=9B#158?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 7 ++++++ .../MySqlConnector/Curd/MySqlSelectTest.cs | 18 +++++++++++++++ .../Dameng/Curd/DamengSelectTest.cs | 18 +++++++++++++++ .../Default/Curd/OdbcSelectTest.cs | 18 +++++++++++++++ .../MySql/Curd/MySqlSelectTest.cs | 18 +++++++++++++++ .../Oracle/Curd/OracleSelectTest.cs | 18 +++++++++++++++ .../PostgreSQL/Curd/PostgreSQLSelectTest.cs | 18 +++++++++++++++ .../SqlServer/Curd/SqlServerSelectTest.cs | 18 +++++++++++++++ .../MySql/Curd/MySqlSelectTest.cs | 18 +++++++++++++++ .../Oracle/Curd/OracleSelectTest.cs | 18 +++++++++++++++ .../PostgreSQL/Curd/PostgreSQLSelectTest.cs | 18 +++++++++++++++ .../SqlServer/Curd/SqlServerSelectTest.cs | 18 +++++++++++++++ .../Sqlite/Curd/SqliteSelectTest.cs | 18 +++++++++++++++ FreeSql/FreeSql.xml | 14 +++++++++++- .../Curd/ISelect/FieldAliasOptions.cs | 22 +++++++++++++++++++ FreeSql/Interface/Curd/ISelect/ISelect1.cs | 3 ++- FreeSql/Interface/Curd/ISelect/ISelect10.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect2.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect3.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect4.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect5.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect6.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect7.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect8.cs | 2 +- FreeSql/Interface/Curd/ISelect/ISelect9.cs | 2 +- FreeSql/Internal/CommonExpression.cs | 6 +++++ .../SelectProvider/Select0Provider.cs | 8 +++---- .../SelectProvider/Select10Provider.cs | 6 ++--- .../SelectProvider/Select1Provider.cs | 6 ++--- .../SelectProvider/Select2Provider.cs | 6 ++--- .../SelectProvider/Select3Provider.cs | 6 ++--- .../SelectProvider/Select4Provider.cs | 6 ++--- .../SelectProvider/Select5Provider.cs | 6 ++--- .../SelectProvider/Select6Provider.cs | 6 ++--- .../SelectProvider/Select7Provider.cs | 6 ++--- .../SelectProvider/Select8Provider.cs | 6 ++--- .../SelectProvider/Select9Provider.cs | 6 ++--- 37 files changed, 309 insertions(+), 45 deletions(-) create mode 100644 FreeSql/Interface/Curd/ISelect/FieldAliasOptions.cs diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index dc0203b8..d9f91124 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,6 +110,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs index 571ff538..c0936140 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs @@ -995,6 +995,24 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title` select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs index 0f2ff099..bd34ae44 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs @@ -922,6 +922,24 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TiOtmModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs index 4bbf76e3..f5ddd317 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs @@ -887,6 +887,24 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title] select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs index c6b9f900..55b667ea 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs @@ -1006,6 +1006,24 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title` select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs index 6f0bfc79..98e1c28d 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs @@ -922,6 +922,24 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TiOtmModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs index eae61153..d1c0da01 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs @@ -978,6 +978,24 @@ WHERE ((((a.""id"")::varchar) in (SELECT b.""title"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs index 9e7c6e74..4b7f5448 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs @@ -868,6 +868,24 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title] select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs index d2a251fc..43db97cc 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs @@ -1037,6 +1037,24 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title` select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs index 0e4e657c..9eb3b48b 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs @@ -922,6 +922,24 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TiOtmModel1 diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs index 9418b8d0..7ee59d6b 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs @@ -995,6 +995,24 @@ WHERE ((((a.""id"")::varchar) in (SELECT b.""title"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index fef4aa42..2f141e8d 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -913,6 +913,24 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title] select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs index 743bb309..4b243edc 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs @@ -906,6 +906,24 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title"" select.AsTable((_, old) => old).AsTable((_, old) => old).Min(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Sum(a => a.Id); select.AsTable((_, old) => old).AsTable((_, old) => old).Avg(a => a.Id); + + var sqlsss = select + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_1" : null) + .AsTable((type, old) => type == typeof(Topic) ? $"{old}_2" : null) + .ToSql(a => new + { + a.Id, + a.Clicks + }, FieldAliasOptions.AsProperty); + + var slsld3 = select + .AsTable((type, old) => type == typeof(Topic) ? $"({sqlsss})" : null) + .Page(1, 20) + .ToList(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 4b4e7645..14d2a6a5 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -894,6 +894,17 @@ + + + 自动产生 as1, as2, as3 .... 字段别名 + 这种方法可以最大程度防止多表,存在相同字段的问题 + + + + + 使用属性名作为字段别名 + + 【linq to sql】专用方法,不建议直接使用 @@ -1316,12 +1327,13 @@ - + 返回即将执行的SQL语句 返回类型 选择列 + 字段别名 diff --git a/FreeSql/Interface/Curd/ISelect/FieldAliasOptions.cs b/FreeSql/Interface/Curd/ISelect/FieldAliasOptions.cs new file mode 100644 index 00000000..6c17997a --- /dev/null +++ b/FreeSql/Interface/Curd/ISelect/FieldAliasOptions.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Text; + +namespace FreeSql +{ + public enum FieldAliasOptions + { + /// + /// 自动产生 as1, as2, as3 .... 字段别名 + /// 这种方法可以最大程度防止多表,存在相同字段的问题 + /// + AsIndex, + + + /// + /// 使用属性名作为字段别名 + /// + AsProperty + } +} diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs index 01542938..32e296d2 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs @@ -89,8 +89,9 @@ namespace FreeSql /// /// 返回类型 /// 选择列 + /// 字段别名 /// - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); /// /// 执行SQL查询,返回指定字段的聚合结果 diff --git a/FreeSql/Interface/Curd/ISelect/ISelect10.cs b/FreeSql/Interface/Curd/ISelect/ISelect10.cs index a148e3d2..c370667b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect10.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect10.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect2.cs b/FreeSql/Interface/Curd/ISelect/ISelect2.cs index 4ce85e8b..c419870b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect2.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect2.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect3.cs b/FreeSql/Interface/Curd/ISelect/ISelect3.cs index cb384c44..d53693c1 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect3.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect3.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect4.cs b/FreeSql/Interface/Curd/ISelect/ISelect4.cs index 7bedf4d0..b60dfc14 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect4.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect4.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect5.cs b/FreeSql/Interface/Curd/ISelect/ISelect5.cs index 59b90b9d..f4c340be 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect5.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect5.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect6.cs b/FreeSql/Interface/Curd/ISelect/ISelect6.cs index 92b0275b..8a6db616 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect6.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect6.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect7.cs b/FreeSql/Interface/Curd/ISelect/ISelect7.cs index a13a8b6f..62a0d528 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect7.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect7.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect8.cs b/FreeSql/Interface/Curd/ISelect/ISelect8.cs index 0e9d1633..18d4c318 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect8.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect8.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect9.cs b/FreeSql/Interface/Curd/ISelect/ISelect9.cs index 8c3f9d16..f8974d0b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect9.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect9.cs @@ -28,7 +28,7 @@ namespace FreeSql DataTable ToDataTable(Expression> select); List ToList(Expression> select); List ToList(); - string ToSql(Expression> select); + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); decimal Sum(Expression> column); TMember Min(Expression> column); diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index e43904f5..b1d2a2d8 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -25,6 +25,7 @@ namespace FreeSql.Internal _common = common; } + internal const int ReadAnonymousFieldAsCsName = -53129; public bool ReadAnonymousField(List _tables, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Func getSelectGroupingMapString, List whereCascadeExpression, bool isAllDtoMap) { Func getTSC = () => new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression }; @@ -37,6 +38,7 @@ namespace FreeSql.Internal parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})"; field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(" as").Append(++index); + else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName); return false; case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap); case ExpressionType.Constant: @@ -54,6 +56,7 @@ namespace FreeSql.Internal parent.DbField = _common.FormatSql("{0}", constExp?.Value); field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(" as").Append(++index); + else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName); return false; case ExpressionType.Call: var callExp = exp as MethodCallExpression; @@ -70,6 +73,7 @@ namespace FreeSql.Internal parent.DbField = ExpressionLambdaToSql(exp, getTSC()); field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(" as").Append(++index); + else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName); return false; case ExpressionType.Parameter: case ExpressionType.MemberAccess: @@ -102,6 +106,7 @@ namespace FreeSql.Internal parent.DbField = ExpressionLambdaToSql(exp, getTSC()); field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(" as").Append(++index); + else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName); parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type; return false; } @@ -219,6 +224,7 @@ namespace FreeSql.Internal parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})"; field.Append(", ").Append(parent.DbField); if (index >= 0) field.Append(" as").Append(++index); + else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName); return false; } public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index bb3db92c..b9d079e5 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -525,11 +525,11 @@ namespace FreeSql.Internal.CommonProvider return ToListMrPrivate(sql, af, otherData); } protected List ToListMapReader((ReadAnonymousTypeInfo map, string field) af) => ToListMapReaderPrivate(af, null); - protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp) + protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { var map = new ReadAnonymousTypeInfo(); var field = new StringBuilder(); - var index = 0; + var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0; _commonExpression.ReadAnonymousField(_tables, field, map, ref index, newexp, null, _whereCascadeExpression, true); return (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null); @@ -1059,9 +1059,9 @@ namespace FreeSql.Internal.CommonProvider protected TSelect InternalOrderByDescending(Expression column) => this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, column, true, null)} DESC"); protected List InternalToList(Expression select) => this.ToListMapReader(this.GetExpressionField(select)); - protected string InternalToSql(Expression select) + protected string InternalToSql(Expression select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - var af = this.GetExpressionField(select); + var af = this.GetExpressionField(select, fieldAlias); return this.ToSql(af.field); } diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs index 008dbdb4..892b45d6 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs @@ -121,11 +121,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 92542383..0187fd1b 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -263,11 +263,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - public string ToSql(Expression> select) + public string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); _tables[0].Parameter = select.Parameters[0]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } public TReturn ToAggregate(Expression, TReturn>> select) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs index f1d3fc81..40ed5cb9 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs @@ -98,11 +98,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs index bf9b37f3..31f842a7 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs @@ -101,11 +101,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs index 4d390f0f..e3ab43e0 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs @@ -104,11 +104,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs index e0a13adc..97633b78 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs @@ -107,11 +107,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs index 8c9c18d8..1f3dfd02 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs @@ -110,11 +110,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs index b7065918..b6e443f8 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs @@ -113,11 +113,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs index af888f39..3c47a61e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs @@ -117,11 +117,11 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs index c8186b68..5011cfa1 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs @@ -117,11 +117,11 @@ namespace FreeSql.Internal.CommonProvider for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; return this.InternalToDataTable(select?.Body); } - string ISelect.ToSql(Expression> select) + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex) { - if (select == null) return this.InternalToSql(select?.Body); + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body); + return this.InternalToSql(select?.Body, fieldAlias); } ISelect ISelect.LeftJoin(Expression> exp)