mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 增加 ISelect.OrderBy 重载,与 WhereIf 相同行为;
- 修复 Aop.ParseExpression 使用 FreeParse 方法死循环的 bug;
This commit is contained in:
		@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
	<PropertyGroup>
 | 
			
		||||
		<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
 | 
			
		||||
		<Version>0.6.6</Version>
 | 
			
		||||
		<Version>0.6.7</Version>
 | 
			
		||||
		<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
			
		||||
		<Authors>YeXiangQin</Authors>
 | 
			
		||||
		<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
 | 
			
		||||
 
 | 
			
		||||
@@ -893,12 +893,21 @@
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect0`2.OrderBy(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 })
 | 
			
		||||
            按原生sql语法排序,OrderBy("count(name) + ?cc desc", new { cc = 1 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="sql">sql语法</param>
 | 
			
		||||
            <param name="parms">参数</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect0`2.OrderBy(System.Boolean,System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            按原生sql语法排序,OrderBy(true, "count(name) + ?cc desc", new { cc = 1 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="condition">true 时生效</param>
 | 
			
		||||
            <param name="sql">sql语法</param>
 | 
			
		||||
            <param name="parms">参数</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect0`2.Skip(System.Int32)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询向后偏移行数
 | 
			
		||||
@@ -1230,6 +1239,15 @@
 | 
			
		||||
            <param name="column"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect`1.OrderBy``1(System.Boolean,System.Linq.Expressions.Expression{System.Func{`0,``0}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            按列排序,OrderBy(true, a => a.Time)
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="TMember"></typeparam>
 | 
			
		||||
            <param name="condition">true 时生效</param>
 | 
			
		||||
            <param name="column"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect`1.OrderByDescending``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            按列倒向排序,OrderByDescending(a => a.Time)
 | 
			
		||||
@@ -1237,6 +1255,14 @@
 | 
			
		||||
            <param name="column">列</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect`1.OrderByDescending``1(System.Boolean,System.Linq.Expressions.Expression{System.Func{`0,``0}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            按列倒向排序,OrderByDescending(true, a => a.Time)
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="condition">true 时生效</param>
 | 
			
		||||
            <param name="column">列</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect`1.Include``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
 | 
			
		||||
 
 | 
			
		||||
@@ -203,12 +203,20 @@ namespace FreeSql {
 | 
			
		||||
		TSelect Having(string sql, object parms = null);
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 })
 | 
			
		||||
		/// 按原生sql语法排序,OrderBy("count(name) + ?cc desc", new { cc = 1 })
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="sql">sql语法</param>
 | 
			
		||||
		/// <param name="parms">参数</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		TSelect OrderBy(string sql, object parms = null);
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 按原生sql语法排序,OrderBy(true, "count(name) + ?cc desc", new { cc = 1 })
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="condition">true 时生效</param>
 | 
			
		||||
		/// <param name="sql">sql语法</param>
 | 
			
		||||
		/// <param name="parms">参数</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		TSelect OrderBy(bool condition, string sql, object parms = null);
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 查询向后偏移行数
 | 
			
		||||
 
 | 
			
		||||
@@ -288,11 +288,26 @@ namespace FreeSql {
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column);
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 按列排序,OrderBy(true, a => a.Time)
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <typeparam name="TMember"></typeparam>
 | 
			
		||||
		/// <param name="condition">true 时生效</param>
 | 
			
		||||
		/// <param name="column"></param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		ISelect<T1> OrderBy<TMember>(bool condition, Expression<Func<T1, TMember>> column);
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 按列倒向排序,OrderByDescending(a => a.Time)
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="column">列</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		ISelect<T1> OrderByDescending<TMember>(Expression<Func<T1, TMember>> column);
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 按列倒向排序,OrderByDescending(true, a => a.Time)
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="condition">true 时生效</param>
 | 
			
		||||
		/// <param name="column">列</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		ISelect<T1> OrderByDescending<TMember>(bool condition, Expression<Func<T1, TMember>> column);
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
 | 
			
		||||
 
 | 
			
		||||
@@ -929,7 +929,7 @@ namespace FreeSql.Internal {
 | 
			
		||||
					getSelectGroupingMapString = this.getSelectGroupingMapString,
 | 
			
		||||
					tbtype = this.tbtype,
 | 
			
		||||
					isQuoteName = this.isQuoteName,
 | 
			
		||||
					isDisableDiyParse = false,
 | 
			
		||||
					isDisableDiyParse = true,
 | 
			
		||||
					style = this.style,
 | 
			
		||||
					currentTable = this.currentTable
 | 
			
		||||
				};
 | 
			
		||||
 
 | 
			
		||||
@@ -182,7 +182,9 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
		}
 | 
			
		||||
		public TSelect Offset(int offset) => this.Skip(offset) as TSelect;
 | 
			
		||||
 | 
			
		||||
		public TSelect OrderBy(string sql, object parms = null) {
 | 
			
		||||
		public TSelect OrderBy(string sql, object parms = null) => this.OrderBy(true, sql, parms);
 | 
			
		||||
		public TSelect OrderBy(bool condition, string sql, object parms = null) {
 | 
			
		||||
			if (condition == false) return this as TSelect;
 | 
			
		||||
			if (string.IsNullOrEmpty(sql)) _orderby = null;
 | 
			
		||||
			var isnull = string.IsNullOrEmpty(_orderby);
 | 
			
		||||
			_orderby = string.Concat(isnull ? " \r\nORDER BY " : "", _orderby, isnull ? "" : ", ", sql);
 | 
			
		||||
 
 | 
			
		||||
@@ -40,8 +40,24 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
							if (whereIfCond == "1" || whereIfCond == "'t'")
 | 
			
		||||
								this.InternalWhere(expCall.Arguments[1]);
 | 
			
		||||
							break;
 | 
			
		||||
						case "OrderBy": this.InternalOrderBy(expCall.Arguments[0]); break;
 | 
			
		||||
						case "OrderByDescending": this.InternalOrderByDescending(expCall.Arguments[0]); break;
 | 
			
		||||
						case "OrderBy":
 | 
			
		||||
							if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool)) {
 | 
			
		||||
								var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
 | 
			
		||||
								if (ifcond == "1" || ifcond == "'t'")
 | 
			
		||||
									this.InternalOrderBy(expCall.Arguments.LastOrDefault());
 | 
			
		||||
								break;
 | 
			
		||||
							}
 | 
			
		||||
							this.InternalOrderBy(expCall.Arguments.LastOrDefault());
 | 
			
		||||
							break;
 | 
			
		||||
						case "OrderByDescending":
 | 
			
		||||
							if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool)) {
 | 
			
		||||
								var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
 | 
			
		||||
								if (ifcond == "1" || ifcond == "'t'")
 | 
			
		||||
									this.InternalOrderByDescending(expCall.Arguments.LastOrDefault());
 | 
			
		||||
								break;
 | 
			
		||||
							}
 | 
			
		||||
							this.InternalOrderByDescending(expCall.Arguments.LastOrDefault());
 | 
			
		||||
							break;
 | 
			
		||||
 | 
			
		||||
						case "LeftJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.LeftJoin); break;
 | 
			
		||||
						case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break;
 | 
			
		||||
@@ -113,14 +129,15 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			_tables[0].Parameter = column.Parameters[0];
 | 
			
		||||
			return this.InternalMinAsync<TMember>(column?.Body);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column) {
 | 
			
		||||
			if (column == null) return this;
 | 
			
		||||
		public ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column) => this.OrderBy(true, column);
 | 
			
		||||
		public ISelect<T1> OrderBy<TMember>(bool condition, Expression<Func<T1, TMember>> column) {
 | 
			
		||||
			if (condition == false || column == null) return this;
 | 
			
		||||
			_tables[0].Parameter = column.Parameters[0];
 | 
			
		||||
			return this.InternalOrderBy(column?.Body);
 | 
			
		||||
		}
 | 
			
		||||
		public ISelect<T1> OrderByDescending<TMember>(Expression<Func<T1, TMember>> column) {
 | 
			
		||||
			if (column == null) return this;
 | 
			
		||||
		public ISelect<T1> OrderByDescending<TMember>(Expression<Func<T1, TMember>> column) => this.OrderByDescending(true, column);
 | 
			
		||||
		public ISelect<T1> OrderByDescending<TMember>(bool condition, Expression<Func<T1, TMember>> column) {
 | 
			
		||||
			if (condition == false || column == null) return this;
 | 
			
		||||
			_tables[0].Parameter = column.Parameters[0];
 | 
			
		||||
			return this.InternalOrderByDescending(column?.Body);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user