From dd477482f184f928e33098ec4670562777908ad7 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Fri, 4 Sep 2020 12:12:37 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20ISelect=20Aggregate(la?=
=?UTF-8?q?mbda,=20out=20var=20result)=20=E6=96=B9=E6=B3=95=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 7 +++++++
.../FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs | 4 ++++
FreeSql.Tests/FreeSql.Tests/UnitTest3.cs | 2 --
FreeSql/FreeSql.xml | 12 ++++++++++++
FreeSql/Interface/Curd/ISelect/ISelect1.cs | 11 +++++++++++
FreeSql/Interface/Curd/ISelect/ISelect10.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect2.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect3.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect4.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect5.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect6.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect7.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect8.cs | 1 +
FreeSql/Interface/Curd/ISelect/ISelect9.cs | 1 +
.../SelectProvider/Select10Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select1Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select2Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select3Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select4Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select5Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select6Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select7Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select8Provider.cs | 5 +++++
.../CommonProvider/SelectProvider/Select9Provider.cs | 5 +++++
24 files changed, 93 insertions(+), 2 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 5a0c8bd0..9c6cd88b 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -130,6 +130,13 @@
清空状态数据
+
+
+ 根据 lambda 条件删除数据
+
+
+
+
添加
diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs
index 40d64009..3eefc1ef 100644
--- a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs
@@ -812,6 +812,10 @@ namespace FreeSql.Tests.Dameng
public void ToAggregate()
{
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
+
+ select
+ .Aggregate(a => new { sum = a.Sum(a.Key.Id), count = a.Count() }, out var output)
+ .ToList();
}
[Fact]
public void OrderBy()
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
index 2dec40eb..dcfab4da 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
@@ -231,8 +231,6 @@ namespace FreeSql.Tests
Id = a.Key,
EdiId1 = SqlExt.Max(a.Key).Over().PartitionBy(new { a.Value.EdiId, a.Value.Id }).OrderByDescending(new { a.Value.EdiId, a.Value.Id }).ToValue(),
EdiId2 = SqlExt.Max(a.Key).Over().PartitionBy(a.Value.EdiId).OrderByDescending(a.Value.Id).ToValue(),
-
- Sub1 = g.sqlserver.Select().Where(b => b.Id == a.Key).Count()
});
var sqlextGroupConcat = g.mysql.Select()
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index 983c8c85..030132d4 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -2032,6 +2032,18 @@
+
+
+ 执行SQL查询,返回指定字段的聚合结果给 output 参数
+ fsql.Select<T>()
+ .Aggregate(a => new { count = a.Count, sum = a.Sum(a.Key.Price) }, out var agg)
+ .Page(1, 10).ToList();
+
+
+
+
+
+
求和
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs
index 96daf821..fd7a814c 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs
@@ -110,6 +110,17 @@ namespace FreeSql
///
///
TReturn ToAggregate(Expression, TReturn>> select);
+ ///
+ /// 执行SQL查询,返回指定字段的聚合结果给 output 参数
+ /// fsql.Select<T>()
+ /// .Aggregate(a => new { count = a.Count, sum = a.Sum(a.Key.Price) }, out var agg)
+ /// .Page(1, 10).ToList();
+ ///
+ ///
+ ///
+ ///
+ ///
+ ISelect Aggregate(Expression, TReturn>> select, out TReturn result);
///
/// 求和
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect10.cs b/FreeSql/Interface/Curd/ISelect/ISelect10.cs
index 1acf96da..f35462e6 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect10.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect10.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect2.cs b/FreeSql/Interface/Curd/ISelect/ISelect2.cs
index 6bcdaac6..a6aeaa28 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect2.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect2.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect3.cs b/FreeSql/Interface/Curd/ISelect/ISelect3.cs
index ea441d28..35a6212a 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect3.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect3.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect4.cs b/FreeSql/Interface/Curd/ISelect/ISelect4.cs
index 28e2c5f1..93c6f809 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect4.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect4.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect5.cs b/FreeSql/Interface/Curd/ISelect/ISelect5.cs
index d1947791..12f4714b 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect5.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect5.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect6.cs b/FreeSql/Interface/Curd/ISelect/ISelect6.cs
index 700cdf03..a6f6dffb 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect6.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect6.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect7.cs b/FreeSql/Interface/Curd/ISelect/ISelect7.cs
index d7117d0c..50c4f0a6 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect7.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect7.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect8.cs b/FreeSql/Interface/Curd/ISelect/ISelect8.cs
index 8ed0514a..f03b7904 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect8.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect8.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Interface/Curd/ISelect/ISelect9.cs b/FreeSql/Interface/Curd/ISelect/ISelect9.cs
index 96da6b7a..99218e60 100644
--- a/FreeSql/Interface/Curd/ISelect/ISelect9.cs
+++ b/FreeSql/Interface/Curd/ISelect/ISelect9.cs
@@ -40,6 +40,7 @@ namespace FreeSql
string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select);
+ ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result);
decimal Sum(Expression> column);
TMember Min(Expression> column);
TMember Max(Expression> column);
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs
index 3a074d5b..1e9a712a 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs
@@ -118,6 +118,11 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
return this.InternalToAggregate(select?.Body);
}
+ ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result)
+ {
+ result = (this as ISelect).ToAggregate(select);
+ return this;
+ }
List ISelect.ToList(Expression> select)
{
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
index 41afd44a..76fbf170 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
@@ -210,6 +210,11 @@ namespace FreeSql.Internal.CommonProvider
_tables[0].Parameter = select.Parameters[0];
return this.InternalToAggregate(select?.Body);
}
+ public ISelect Aggregate(Expression, TReturn>> select, out TReturn result)
+ {
+ result = ToAggregate(select);
+ return this;
+ }
public ISelect Where(Expression> exp) => WhereIf(true, exp);
public ISelect WhereIf(bool condition, Expression> exp)
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs
index 25a71766..005e485b 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs
@@ -94,6 +94,11 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
return this.InternalToAggregate(select?.Body);
}
+ ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result)
+ {
+ result = (this as ISelect).ToAggregate(select);
+ return this;
+ }
List ISelect.ToList(Expression> select)
{
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs
index e8bac16d..707eccf8 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs
@@ -97,6 +97,11 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
return this.InternalToAggregate(select?.Body);
}
+ ISelect