From d3c4bbb87996f9cfb46fc5bc4897eba65bda1844 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Sat, 15 Aug 2020 00:32:11 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E6=94=B9=20SqlExt=20PartitionBy?=
=?UTF-8?q?=20=E6=97=A0=E6=B3=95=E4=BC=A0=E5=85=A5=E5=A4=9A=E5=88=97?=
=?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 16 ++++++
FreeSql.Tests/FreeSql.Tests/UnitTest3.cs | 6 +-
.../FreeSqlGlobalExpressionCallExtensions.cs | 55 ++++++++++++++++---
3 files changed, 68 insertions(+), 9 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 5ca74890..2acb6679 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -130,6 +130,13 @@
清空状态数据
+
+
+ 根据 lambda 条件删除数据
+
+
+
+
添加
@@ -520,5 +527,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
index 4693b4fb..dcfab4da 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
@@ -224,11 +224,13 @@ namespace FreeSql.Tests
.Page(1, 10).ToSql("Id");
- var sqlextMax1 = g.mysql.Select()
+ var sqlextMax1 = g.sqlserver.Select()
.GroupBy(a => a.Id)
.ToSql(a => new
{
- Id = a.Key, EdiId = SqlExt.Max(a.Key).Over().ToValue()
+ 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(),
});
var sqlextGroupConcat = g.mysql.Select()
diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
index d8903744..a5cecf49 100644
--- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
+++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Linq.Expressions;
using System.Text;
using System.Threading;
using static FreeSql.SqlExtExtensions;
@@ -157,7 +158,19 @@ namespace FreeSql
}
public static ISqlOver PartitionBy(this ISqlOver that, object column)
{
- expSbLast.Sb.Append(" partition by ").Append(expContext.ParsedContent["column"]).Append(",");
+ var sb = expSbLast.Sb;
+ sb.Append(" partition by ");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ if (a > 0) sb.Append(",");
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ }
+ } else
+ sb.Append(expContext.ParsedContent["column"]);
return that;
}
public static ISqlOver OrderBy(this ISqlOver that, object column) => OrderByPriv(that, false);
@@ -170,9 +183,23 @@ namespace FreeSql
sb.Append(" order by ");
expSbLast.IsOrderBy = true;
}
- sb.Append(expContext.ParsedContent["column"]);
- if (isDesc) sb.Append(" desc");
- sb.Append(",");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
+ }
+ else
+ {
+ sb.Append(expContext.ParsedContent["column"]);
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
return that;
}
public static TValue ToValue(this ISqlOver that)
@@ -254,9 +281,23 @@ namespace FreeSql
sb.Append(" order by ");
expSbLast.IsOrderBy = true;
}
- sb.Append(expContext.ParsedContent["column"]);
- if (isDesc) sb.Append(" desc");
- sb.Append(",");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
+ }
+ else
+ {
+ sb.Append(expContext.ParsedContent["column"]);
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
return that;
}
public static string ToValue(this IGroupConcat that)