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