diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs index eccdba92..2dec40eb 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs @@ -232,7 +232,7 @@ namespace FreeSql.Tests 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(), - Sub1 = g.sqlite.Select().Where(b => b.Id == a.Key).Count() + Sub1 = g.sqlserver.Select().Where(b => b.Id == a.Key).Count() }); var sqlextGroupConcat = g.mysql.Select() diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs index 4058a933..3a074d5b 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs @@ -201,7 +201,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -260,11 +263,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index dc9b92f5..41afd44a 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -274,7 +274,13 @@ namespace FreeSql.Internal.CommonProvider return this; } - public bool Any(Expression> exp) => this.Where(exp).Any(); + public bool Any(Expression> exp) + { + var oldwhere = _where.ToString(); + var ret = this.Where(exp).Any(); + _where.Clear().Append(oldwhere); + return ret; + } public TReturn ToOne(Expression> select) => this.Limit(1).ToList(select).FirstOrDefault(); public TDto ToOne() => this.Limit(1).ToList().FirstOrDefault(); @@ -1083,7 +1089,13 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToAggregateAsync(select?.Body); } - public Task AnyAsync(Expression> exp) => this.Where(exp).AnyAsync(); + async public Task AnyAsync(Expression> exp) + { + var oldwhere = _where.ToString(); + var ret = await this.Where(exp).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; + } async public Task ToOneAsync(Expression> select) => (await this.Limit(1).ToListAsync(select)).FirstOrDefault(); async public Task ToOneAsync() => (await this.Limit(1).ToListAsync()).FirstOrDefault(); public Task FirstAsync(Expression> select) => this.ToOneAsync(select); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs index b6617bc4..25a71766 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs @@ -169,7 +169,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -228,11 +231,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs index 502b1e04..e8bac16d 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs @@ -173,7 +173,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -232,11 +235,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs index c7f86211..d4c9f644 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs @@ -177,7 +177,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -236,11 +239,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs index 1624a6ed..7a824b06 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs @@ -181,7 +181,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -240,11 +243,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs index c63eba00..8dcf25e6 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs @@ -185,7 +185,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -244,11 +247,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs index 1a583037..703f446b 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs @@ -189,7 +189,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -248,11 +251,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs index 35f87674..6ff53f5a 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs @@ -193,7 +193,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -252,11 +255,14 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToDataTableAsync(select?.Body); } - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs index 7f3d0505..63fb5ae0 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs @@ -193,7 +193,10 @@ namespace FreeSql.Internal.CommonProvider { if (exp == null) return this.Any(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; } TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); @@ -202,11 +205,14 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - Task ISelect.AnyAsync(Expression> exp) + async Task ISelect.AnyAsync(Expression> exp) { - if (exp == null) return this.AnyAsync(); + if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression, _params)).AnyAsync(); + _where.Clear().Append(oldwhere); + return ret; } Task ISelect.ToDataTableAsync(Expression> select)