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 6a768543..5b67eff0 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs
@@ -821,7 +821,6 @@ namespace FreeSql.Tests.MySqlConnector
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist1 = select
@@ -830,7 +829,14 @@ namespace FreeSql.Tests.MySqlConnector
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -842,7 +848,6 @@ namespace FreeSql.Tests.MySqlConnector
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist2 = select
@@ -853,7 +858,16 @@ namespace FreeSql.Tests.MySqlConnector
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -863,7 +877,6 @@ namespace FreeSql.Tests.MySqlConnector
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid),
sum3 = b.Sum(b.Value.Type.Parent.Id)
});
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 2a444d8e..ea7b538e 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs
@@ -749,7 +749,6 @@ namespace FreeSql.Tests.Odbc.Dameng
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist1 = select
@@ -760,6 +759,14 @@ namespace FreeSql.Tests.Odbc.Dameng
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -780,6 +787,16 @@ namespace FreeSql.Tests.Odbc.Dameng
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql3 = select
.GroupBy(a => a.Title)
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 bd446fcf..c0a0a23e 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs
@@ -749,6 +749,14 @@ namespace FreeSql.Tests.Odbc.Default
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -767,6 +775,16 @@ namespace FreeSql.Tests.Odbc.Default
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
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 67225bac..d72847b8 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs
@@ -832,7 +832,6 @@ namespace FreeSql.Tests.Odbc.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist1 = select
@@ -841,7 +840,14 @@ namespace FreeSql.Tests.Odbc.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -853,7 +859,6 @@ namespace FreeSql.Tests.Odbc.MySql
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist2 = select
@@ -864,7 +869,16 @@ namespace FreeSql.Tests.Odbc.MySql
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -874,7 +888,6 @@ namespace FreeSql.Tests.Odbc.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid),
sum3 = b.Sum(b.Value.Type.Parent.Id)
});
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 86e20010..e97f991c 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs
@@ -759,6 +759,14 @@ namespace FreeSql.Tests.Odbc.Oracle
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -777,6 +785,16 @@ namespace FreeSql.Tests.Odbc.Oracle
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
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 99be779b..3f9b79cf 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs
@@ -819,6 +819,14 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -837,6 +845,16 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
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 f1ebb323..701c91a7 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs
@@ -714,6 +714,14 @@ namespace FreeSql.Tests.Odbc.SqlServer
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -732,6 +740,16 @@ namespace FreeSql.Tests.Odbc.SqlServer
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
index 69a32587..7bb03da1 100644
--- a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
@@ -750,6 +750,14 @@ namespace FreeSql.Tests.MsAccess
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -768,6 +776,16 @@ namespace FreeSql.Tests.MsAccess
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
index 054e726c..60f05168 100644
--- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
@@ -863,7 +863,6 @@ namespace FreeSql.Tests.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist1 = select
@@ -872,7 +871,14 @@ namespace FreeSql.Tests.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -884,7 +890,6 @@ namespace FreeSql.Tests.MySql
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist2 = select
@@ -895,7 +900,16 @@ namespace FreeSql.Tests.MySql
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -905,7 +919,6 @@ namespace FreeSql.Tests.MySql
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid),
sum3 = b.Sum(b.Value.Type.Parent.Id)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
index b15f3539..26aacc73 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
@@ -759,6 +759,14 @@ namespace FreeSql.Tests.Oracle
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -777,6 +785,16 @@ namespace FreeSql.Tests.Oracle
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
index 28f04780..878c0150 100644
--- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
@@ -836,6 +836,14 @@ namespace FreeSql.Tests.PostgreSQL
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -854,6 +862,16 @@ namespace FreeSql.Tests.PostgreSQL
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
index d8d36c82..6625e85a 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
@@ -763,6 +763,14 @@ namespace FreeSql.Tests.SqlServer
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
var aggsql2 = select
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
@@ -781,6 +789,16 @@ namespace FreeSql.Tests.SqlServer
b.Key.Title,
b.Key.yyyy,
+ cou = b.Count(),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
index 667f7596..49f7cdb9 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
@@ -701,7 +701,6 @@ namespace FreeSql.Tests.Sqlite
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist1 = select
@@ -710,7 +709,14 @@ namespace FreeSql.Tests.Sqlite
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist11 = select
+ .GroupBy(a => a.Title)
+ .ToDictionary(b => new
+ {
+ b.Key,
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -722,7 +728,6 @@ namespace FreeSql.Tests.Sqlite
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
sum2 = b.Sum(b.Value.TypeGuid)
});
var aggtolist2 = select
@@ -733,7 +738,16 @@ namespace FreeSql.Tests.Sqlite
b.Key.yyyy,
cou = b.Count(),
- sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
sum2 = b.Sum(b.Value.TypeGuid)
});
@@ -743,7 +757,6 @@ namespace FreeSql.Tests.Sqlite
{
b.Key,
cou = b.Count(),
- sum = b.Sum(b.Key),
sum2 = b.Sum(b.Value.TypeGuid),
sum3 = b.Sum(b.Value.Type.Parent.Id)
});
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
index ddd934e8..d300dc9c 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
@@ -962,6 +962,29 @@ namespace FreeSql.Tests
sum2 = b.Sum(b.Value.TypeGuid)
});
+ var aggtolist21 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionary(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
+ sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ });
+ var aggtolist22 = select
+ .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
+ .ToDictionaryAsync(b => new
+ {
+ b.Key.Title,
+ b.Key.yyyy,
+
+ cou = b.Count(),
+ sum = b.Sum(b.Key.yyyy),
+ sum2 = b.Sum(b.Value.TypeGuid)
+ }).Result;
+
var aggsql3 = select
.GroupBy(a => a.Title)
.ToSql(b => new
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index e808373b..83ccee42 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -2309,6 +2309,137 @@
+
+
+ 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
+
+
+
+
+
+
+
+
+ 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+ 查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+ 查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+ 查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
+
+
+
+
+
+
+
+ 执行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 })
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
+
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 })
+
+
+
+
+
+
可自定义解析表达式
@@ -2829,6 +2960,12 @@
超时
+
+
+ 获取资源
+
+
+
使用完毕后,归还资源
@@ -2899,6 +3036,12 @@
资源对象
+
+
+ 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
+
+ 资源对象
+
归还对象给对象池的时候触发
@@ -3531,167 +3674,4 @@
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 生成类似Mongodb的ObjectId有序、不重复Guid
-
-
-
-
-
- 插入数据
-
-
-
-
-
-
- 插入数据,传入实体
-
-
-
-
-
-
-
- 插入数据,传入实体数组
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
- 修改数据
-
-
-
-
-
-
- 修改数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 查询数据
-
-
-
-
-
-
- 查询数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 删除数据
-
-
-
-
-
-
- 删除数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 开启事务(不支持异步),60秒未执行完成(可能)被其他线程事务自动提交
-
- 事务体 () => {}
-
-
-
- 开启事务(不支持异步)
-
- 超时,未执行完成(可能)被其他线程事务自动提交
- 事务体 () => {}
-
-
-
- 开启事务(不支持异步)
-
-
- 事务体 () => {}
- 超时,未执行完成(可能)被其他线程事务自动提交
-
-
-
- 数据库访问对象
-
-
-
-
- 所有拦截方法都在这里
-
-
-
-
- CodeFirst 模式开发相关方法
-
-
-
-
- DbFirst 模式开发相关方法
-
-
-
-
- 全局过滤设置,可默认附加为 Select/Update/Delete 条件
-
-
-
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect0.cs b/FreeSql/Interface/Curd/ISelect/ISelect0.cs
index 80a3ca55..ca52d7c2 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect0.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect0.cs
@@ -15,7 +15,7 @@ namespace FreeSql
#else
Task ToDataTableAsync(string field = null);
Task> ToDictionaryAsync(Func keySelector);
- Task> ToDictionaryAsync(Func keySelector, Func valueSelector);
+ Task> ToDictionaryAsync(Func keySelector, Func elementSelector);
Task> ToListAsync(bool includeNestedMembers = false);
Task> ToListAsync(string field);
@@ -60,7 +60,7 @@ namespace FreeSql
///
///
Dictionary ToDictionary(Func keySelector);
- Dictionary ToDictionary(Func keySelector, Func valueSelector);
+ Dictionary ToDictionary(Func keySelector, Func elementSelector);
///
/// 执行SQL查询,返回 T1 实体所有字段的记录,记录不存在时返回 Count 为 0 的列表
/// 注意:
diff --git a/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs b/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs
index 9a8cf6fc..7e73a743 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs
@@ -13,6 +13,7 @@ namespace FreeSql
#else
Task CountAsync();
Task> ToListAsync(Expression, TReturn>> select);
+ Task> ToDictionaryAsync(Expression, TElement>> elementSelector);
#endif
///
@@ -43,6 +44,7 @@ namespace FreeSql
/// 选择列
///
List ToList(Expression, TReturn>> select);
+ Dictionary ToDictionary(Expression, TElement>> elementSelector);
///
/// 【linq to sql】专用方法,不建议直接使用
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
index 5f3a6a88..950b1383 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
@@ -480,23 +480,23 @@ namespace FreeSql.Internal.CommonProvider
}
#endregion
public Dictionary ToDictionary(Func keySelector) => ToDictionary(keySelector, a => a);
- public Dictionary ToDictionary(Func keySelector, Func valueSelector)
+ public Dictionary ToDictionary(Func keySelector, Func elementSelector)
{
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
- if (valueSelector == null) throw new ArgumentNullException(nameof(valueSelector));
+ if (elementSelector == null) throw new ArgumentNullException(nameof(elementSelector));
var af = this.GetAllFieldExpressionTreeLevel2();
var sql = this.ToSql(af.Field);
var dbParms = _params.ToArray();
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
- var ret = new Dictionary();
+ var ret = new Dictionary();
Exception exception = null;
try
{
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
{
var item = af.Read(_orm, dr);
- ret.Add(keySelector(item), valueSelector(item));
+ ret.Add(keySelector(item), elementSelector(item));
}, CommandType.Text, sql, dbParms);
}
catch (Exception ex)
@@ -509,7 +509,7 @@ namespace FreeSql.Internal.CommonProvider
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
}
- if (typeof(TValue) == typeof(T1)) _trackToList?.Invoke(ret.Values);
+ if (typeof(TElement) == typeof(T1)) _trackToList?.Invoke(ret.Values);
return ret;
}
public virtual List ToList(bool includeNestedMembers = false)
@@ -1088,9 +1088,10 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = -10000; //临时规则,不返回 as1
- _commonExpression.ReadAnonymousField(_tables, field, map, ref index, columns, null, _whereCascadeExpression, true);
- this.GroupBy(field.Length > 0 ? field.Remove(0, 2).ToString() : null);
- return new SelectGroupingProvider(_orm, this, map, _commonExpression, _tables);
+ _commonExpression.ReadAnonymousField(_tables, field, map, ref index, columns, null, _whereCascadeExpression, false); //不走 DTO 映射
+ var sql = field.ToString();
+ this.GroupBy(sql.Length > 0 ? sql.Substring(2) : null);
+ return new SelectGroupingProvider(_orm, this, map, sql, _commonExpression, _tables);
}
protected TSelect InternalJoin(Expression exp, SelectTableInfoType joinType)
{
@@ -1146,7 +1147,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = 0;
- _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression, true);
+ _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression, false); //不走 DTO 映射
return this.ToListMapReader(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null)).FirstOrDefault();
}
@@ -1285,23 +1286,23 @@ namespace FreeSql.Internal.CommonProvider
}
public Task> ToDictionaryAsync(Func keySelector) => ToDictionaryAsync(keySelector, a => a);
- async public Task> ToDictionaryAsync(Func keySelector, Func valueSelector)
+ async public Task> ToDictionaryAsync(Func keySelector, Func elementSelector)
{
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
- if (valueSelector == null) throw new ArgumentNullException(nameof(valueSelector));
+ if (elementSelector == null) throw new ArgumentNullException(nameof(elementSelector));
var af = this.GetAllFieldExpressionTreeLevel2();
var sql = this.ToSql(af.Field);
var dbParms = _params.ToArray();
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
- var ret = new Dictionary();
+ var ret = new Dictionary();
Exception exception = null;
try
{
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
{
var item = af.Read(_orm, dr);
- ret.Add(keySelector(item), valueSelector(item));
+ ret.Add(keySelector(item), elementSelector(item));
return Task.FromResult(false);
}, CommandType.Text, sql, dbParms);
}
@@ -1315,7 +1316,7 @@ namespace FreeSql.Internal.CommonProvider
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
}
- if (typeof(TValue) == typeof(T1)) _trackToList?.Invoke(ret.Values);
+ if (typeof(TElement) == typeof(T1)) _trackToList?.Invoke(ret.Values);
return ret;
}
public virtual Task> ToListAsync(bool includeNestedMembers = false)
@@ -1426,7 +1427,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = 0;
- _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression, true);
+ _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression, false); //不走 DTO 映射
return (await this.ToListMapReaderAsync(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null))).FirstOrDefault();
}
#endif
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs
index 46c642d8..8c2474c4 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs
@@ -14,13 +14,15 @@ namespace FreeSql.Internal.CommonProvider
internal IFreeSql _orm;
internal object _select;
internal ReadAnonymousTypeInfo _map;
+ internal string _field;
internal CommonExpression _comonExp;
internal List _tables;
- public SelectGroupingProvider(IFreeSql orm, object select, ReadAnonymousTypeInfo map, CommonExpression comonExp, List tables)
+ public SelectGroupingProvider(IFreeSql orm, object select, ReadAnonymousTypeInfo map, string field, CommonExpression comonExp, List tables)
{
_orm = orm;
_select = select;
_map = map;
+ _field = field;
_comonExp = comonExp;
_tables = tables;
}
@@ -107,20 +109,33 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
+ public List Select(Expression, TReturn>> select) => ToList(select);
public List ToList(Expression, TReturn>> select)
{
var map = new ReadAnonymousTypeInfo();
var field = new StringBuilder();
var index = 0;
- _comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null, true);
+ _comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null, false);
if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TReturn);
var method = _select.GetType().GetMethod("ToListMapReader", BindingFlags.Instance | BindingFlags.NonPublic);
method = method.MakeGenericMethod(typeof(TReturn));
return method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }) as List;
}
-
- public List Select(Expression, TReturn>> select) => ToList(select);
+ public Dictionary ToDictionary(Expression, TElement>> elementSelector)
+ {
+ var map = new ReadAnonymousTypeInfo();
+ var field = new StringBuilder();
+ var index = 0;
+
+ _comonExp.ReadAnonymousField(null, field, map, ref index, elementSelector, getSelectGroupingMapString, null, false);
+ if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TElement);
+ var method = _select.GetType().GetMethod("ToListMapReaderPrivate", BindingFlags.Instance | BindingFlags.NonPublic);
+ method = method.MakeGenericMethod(typeof(TElement));
+ var otherAf = new ReadAnonymousTypeOtherInfo(_field, _map, new List