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)