mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 修改 SqlExt PartitionBy 无法传入多列的问题;
This commit is contained in:
		@@ -130,6 +130,13 @@
 | 
				
			|||||||
            清空状态数据
 | 
					            清空状态数据
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </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)">
 | 
					        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            添加
 | 
					            添加
 | 
				
			||||||
@@ -520,5 +527,14 @@
 | 
				
			|||||||
            <param name="that"></param>
 | 
					            <param name="that"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </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>
 | 
					    </members>
 | 
				
			||||||
</doc>
 | 
					</doc>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -224,11 +224,13 @@ namespace FreeSql.Tests
 | 
				
			|||||||
                
 | 
					                
 | 
				
			||||||
                .Page(1, 10).ToSql("Id");
 | 
					                .Page(1, 10).ToSql("Id");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqlextMax1 = g.mysql.Select<EdiItem>()
 | 
					            var sqlextMax1 = g.sqlserver.Select<EdiItem>()
 | 
				
			||||||
                .GroupBy(a => a.Id)
 | 
					                .GroupBy(a => a.Id)
 | 
				
			||||||
                .ToSql(a => new
 | 
					                .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>()
 | 
					            var sqlextGroupConcat = g.mysql.Select<Edi, EdiItem>()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Linq.Expressions;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using static FreeSql.SqlExtExtensions;
 | 
					using static FreeSql.SqlExtExtensions;
 | 
				
			||||||
@@ -157,7 +158,19 @@ namespace FreeSql
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        public static ISqlOver<TValue> PartitionBy<TValue>(this ISqlOver<TValue> that, object column)
 | 
					        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;
 | 
					            return that;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public static ISqlOver<TValue> OrderBy<TValue>(this ISqlOver<TValue> that, object column) => OrderByPriv(that, false);
 | 
					        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 ");
 | 
					                sb.Append(" order by ");
 | 
				
			||||||
                expSbLast.IsOrderBy = true;
 | 
					                expSbLast.IsOrderBy = true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            sb.Append(expContext.ParsedContent["column"]);
 | 
					            var exp = expContext.RawExpression["column"];
 | 
				
			||||||
            if (isDesc) sb.Append(" desc");
 | 
					            if (exp.NodeType == ExpressionType.New)
 | 
				
			||||||
            sb.Append(",");
 | 
					            {
 | 
				
			||||||
 | 
					                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;
 | 
					            return that;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public static TValue ToValue<TValue>(this ISqlOver<TValue> that)
 | 
					        public static TValue ToValue<TValue>(this ISqlOver<TValue> that)
 | 
				
			||||||
@@ -254,9 +281,23 @@ namespace FreeSql
 | 
				
			|||||||
                sb.Append(" order by ");
 | 
					                sb.Append(" order by ");
 | 
				
			||||||
                expSbLast.IsOrderBy = true;
 | 
					                expSbLast.IsOrderBy = true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            sb.Append(expContext.ParsedContent["column"]);
 | 
					            var exp = expContext.RawExpression["column"];
 | 
				
			||||||
            if (isDesc) sb.Append(" desc");
 | 
					            if (exp.NodeType == ExpressionType.New)
 | 
				
			||||||
            sb.Append(",");
 | 
					            {
 | 
				
			||||||
 | 
					                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;
 | 
					            return that;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public static string ToValue(this IGroupConcat that)
 | 
					        public static string ToValue(this IGroupConcat that)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user