- 修改 SqlExt PartitionBy 无法传入多列的问题;

This commit is contained in:
28810 2020-08-15 00:32:11 +08:00
parent 66f123fbed
commit d3c4bbb879
3 changed files with 68 additions and 9 deletions

View File

@ -130,6 +130,13 @@
清空状态数据
</summary>
</member>
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据 lambda 条件删除数据
</summary>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DbSet`1.Add(`0)">
<summary>
添加
@ -520,5 +527,14 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@ -224,11 +224,13 @@ namespace FreeSql.Tests
.Page(1, 10).ToSql("Id");
var sqlextMax1 = g.mysql.Select<EdiItem>()
var sqlextMax1 = g.sqlserver.Select<EdiItem>()
.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<Edi, EdiItem>()

View File

@ -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<TValue> PartitionBy<TValue>(this ISqlOver<TValue> 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<TValue> OrderBy<TValue>(this ISqlOver<TValue> 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<TValue>(this ISqlOver<TValue> 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)