diff --git a/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/UnitTest1.cs index 24b42c86..cfe6f776 100644 --- a/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/UnitTest1.cs @@ -143,9 +143,33 @@ namespace FreeSql.Tests { ).ToList(); + var groupbysql = g.mysql.Select().From((s, b, c) => s + .Where(a => a.Id == 1) + .WhereIf(false, a => a.Id == 2) + ) + .WhereIf(true, (a, b, c) => a.Id == 3) + .GroupBy((a, b, c) => new { tt2 = a.Title.Substring(0, 2), mod4 = a.Id % 4 }) + .Having(a => a.Count() > 0 && a.Avg(a.Key.mod4) > 0 && a.Max(a.Key.mod4) > 0) + .Having(a => a.Count() < 300 || a.Avg(a.Key.mod4) < 100) + .OrderBy(a => a.Key.tt2) + .OrderByDescending(a => a.Count()).ToSql(a => new { a.Key.mod4, a.Key.tt2 }); + + var groupbysql2 = g.mysql.Select().From((s, b, c) => s + .Where(a => a.Id == 1) + .WhereIf(true, a => a.Id == 2) + ) + .WhereIf(false, (a, b, c) => a.Id == 3) + .GroupBy((a, b, c) => new { tt2 = a.Title.Substring(0, 2), mod4 = a.Id % 4 }) + .Having(a => a.Count() > 0 && a.Avg(a.Key.mod4) > 0 && a.Max(a.Key.mod4) > 0) + .Having(a => a.Count() < 300 || a.Avg(a.Key.mod4) < 100) + .OrderBy(a => a.Key.tt2) + .OrderByDescending(a => a.Count()).ToSql(a => a.Key.mod4); + var groupby = g.mysql.Select().From((s, b, c) => s .Where(a => a.Id == 1) + .WhereIf(true, a => a.Id == 2) ) + .WhereIf(true, (a,b,c) => a.Id == 3) .GroupBy((a, b, c) => new { tt2 = a.Title.Substring(0, 2), mod4 = a.Id % 4 }) .Having(a => a.Count() > 0 && a.Avg(a.Key.mod4) > 0 && a.Max(a.Key.mod4) > 0) .Having(a => a.Count() < 300 || a.Avg(a.Key.mod4) < 100) diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index ac75d49d..efc5fb9a 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.5.1.2 + 0.5.1.3 true YeXiangQin FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite. diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs index 5626d807..953a223d 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs @@ -147,8 +147,7 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this.Where(null); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; } diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 632b6bd7..035790d8 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -221,8 +221,7 @@ namespace FreeSql.Internal.CommonProvider { public ISelect WhereDynamic(object dywhere) => this.Where(_commonUtils.WhereObject(_tables.First().Table, $"{_tables.First().Alias}.", dywhere)); public ISelect WhereIf(bool condition, Expression> exp) { - if (condition == false) return this; - if (exp == null) return this; + if (condition == false || exp == null) return this; _tables[0].Parameter = exp.Parameters[0]; return this.InternalWhere(exp?.Body); } diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs index 12b700b2..1c885e06 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs @@ -131,10 +131,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs index cbe773a9..d9013e58 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs @@ -133,10 +133,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs index 2ca5524f..8fb84394 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs @@ -135,10 +135,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs index b5a30e03..b4a50cad 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs @@ -137,10 +137,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs index 7bb16dd3..ef946bc4 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs @@ -139,10 +139,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs index 9fd1025e..9a054d15 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs @@ -141,10 +141,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs index 5dbcaf8a..5c0141ec 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs @@ -143,10 +143,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs index 4f1b042a..3a933cf7 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs @@ -145,10 +145,9 @@ namespace FreeSql.Internal.CommonProvider { } ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition) return this.Where(null); - if (exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null)); } bool ISelect.Any(Expression> exp) {