diff --git a/Extensions/FreeSql.Extensions.Linq/SelectedQueryProvider.cs b/Extensions/FreeSql.Extensions.Linq/SelectedQueryProvider.cs index 75177574..6c3ad1d9 100644 --- a/Extensions/FreeSql.Extensions.Linq/SelectedQueryProvider.cs +++ b/Extensions/FreeSql.Extensions.Linq/SelectedQueryProvider.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FreeSql @@ -18,12 +19,12 @@ namespace FreeSql #if net40 #else - Task> ToListAsync(); - Task ToOneAsync(); - Task FirstAsync(); + Task> ToListAsync(CancellationToken cancellationToken = default); + Task ToOneAsync(CancellationToken cancellationToken = default); + Task FirstAsync(CancellationToken cancellationToken = default); - Task AnyAsync(); - Task CountAsync(); + Task AnyAsync(CancellationToken cancellationToken = default); + Task CountAsync(CancellationToken cancellationToken = default); #endif List ToList(); @@ -86,24 +87,24 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - public Task> ToListAsync() + public Task> ToListAsync(CancellationToken cancellationToken = default) { var method = _select.GetType().GetMethod("ToListMapReaderAsync", BindingFlags.Instance | BindingFlags.NonPublic); method = method.MakeGenericMethod(typeof(TOut)); - return method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(_map, _field.Length > 0 ? _field.Remove(0, 2).ToString() : null) }) as Task>; + return method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(_map, _field.Length > 0 ? _field.Remove(0, 2).ToString() : null), cancellationToken }) as Task>; } - async public Task ToOneAsync() => (await ToListAsync()).FirstOrDefault(); - public Task FirstAsync() => ToOneAsync(); + async public Task ToOneAsync(CancellationToken cancellationToken = default) => (await ToListAsync(cancellationToken)).FirstOrDefault(); + public Task FirstAsync(CancellationToken cancellationToken = default) => ToOneAsync(cancellationToken); - public Task AnyAsync() + public Task AnyAsync(CancellationToken cancellationToken = default) { - var method = _select.GetType().GetMethod("AnyAsync", new Type[0]); - return method.Invoke(_select, new object[0]) as Task; + var method = _select.GetType().GetMethod("AnyAsync", new Type[] { typeof(CancellationToken) }); + return method.Invoke(_select, new object[] { cancellationToken }) as Task; } - public Task CountAsync() + public Task CountAsync(CancellationToken cancellationToken = default) { - var method = _select.GetType().GetMethod("CountAsync", new Type[0]); - return method.Invoke(_select, new object[0]) as Task; + var method = _select.GetType().GetMethod("CountAsync", new Type[] { typeof(CancellationToken) }); + return method.Invoke(_select, new object[] { cancellationToken }) as Task; } #endif diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index b3c14870..2d6d3409 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -130,6 +130,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 @@ -502,5 +509,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs index 762ed3a1..86e4eadb 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs @@ -213,6 +213,10 @@ namespace FreeSql.Tests.Dameng var ddd = g.dameng.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList(); Assert.Single(ddd); Assert.Equal(2, ddd[0].Childs.Count); + + ddd = g.dameng.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeListAsync().Result; + Assert.Single(ddd); + Assert.Equal(2, ddd[0].Childs.Count); } public class District { diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 9a093d29..67dbad00 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -14,6 +14,7 @@ using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading; +using System.Threading.Tasks; public static partial class FreeSqlGlobalExtensions { @@ -305,7 +306,7 @@ public static partial class FreeSqlGlobalExtensions #if net40 #else - async public static System.Threading.Tasks.Task> IncludeManyAsync(this List list, IFreeSql orm, Expression>> navigateSelector, Action> then = null) where T1 : class where TNavigate : class + async public static Task> IncludeManyAsync(this List list, IFreeSql orm, Expression>> navigateSelector, Action> then = null, CancellationToken cancellationToken = default) where T1 : class where TNavigate : class { if (list == null || list.Any() == false) return list; if (orm.CodeFirst.IsAutoSyncStructure) @@ -315,7 +316,7 @@ public static partial class FreeSqlGlobalExtensions (orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(T1)); //._dicSyced.TryAdd(typeof(TReturn), true); } var select = orm.Select().IncludeMany(navigateSelector, then) as Select1Provider; - await select.SetListAsync(list); + await select.SetListAsync(list, cancellationToken); return list; } #endif @@ -338,8 +339,8 @@ public static partial class FreeSqlGlobalExtensions a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany && a.RefEntityType == tb.Type).ToArray(); - if (navs.Length != 1) return select.ToList(); var list = select.ToList(); + if (navs.Length != 1) return list; select._trackToList = null; select._includeToList.Clear(); @@ -352,7 +353,7 @@ public static partial class FreeSqlGlobalExtensions } #if net40 #else - async public static System.Threading.Tasks.Task> ToTreeListAsync(this ISelect that) where T1 : class + async public static Task> ToTreeListAsync(this ISelect that, CancellationToken cancellationToken = default) where T1 : class { var select = that as Select1Provider; var tb = select._tables[0].Table; @@ -361,8 +362,8 @@ public static partial class FreeSqlGlobalExtensions a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany && a.RefEntityType == tb.Type).ToArray(); - if (navs.Length != 1) return await select.ToListAsync(); - var list = await select.ToListAsync(); + var list = await select.ToListAsync(false, cancellationToken); + if (navs.Length != 1) return list; select._trackToList = null; select._includeToList.Clear(); @@ -370,7 +371,7 @@ public static partial class FreeSqlGlobalExtensions var navigateSelector = Expression.Lambda>>(Expression.MakeMemberAccess(navigateSelectorParamExp, navs[0].Property), navigateSelectorParamExp); select.IncludeMany(navigateSelector); select._includeManySubListOneToManyTempValue1 = list; - select.SetList(list); + await select.SetListAsync(list, cancellationToken); return list.Except(list.SelectMany(a => FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityValueWithPropertyName(select._orm, tb.Type, a, navs[0].Property.Name) as IEnumerable)).ToList(); } #endif diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index b1e30b18..172f1b10 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -24,6 +24,18 @@ + + + + + + + + True + True + TextTemplate1.tt + + FreeSql.xml diff --git a/FreeSql/Interface/Curd/ISelect/ISelect0.cs b/FreeSql/Interface/Curd/ISelect/ISelect0.cs index b4839cfb..11a54853 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect0.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect0.cs @@ -5,6 +5,7 @@ using System.Data; using System.Data.Common; using System.Linq.Expressions; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FreeSql @@ -16,17 +17,17 @@ namespace FreeSql #if net40 #else - Task ToDataTableAsync(string field = null); - Task> ToDictionaryAsync(Func keySelector); - Task> ToDictionaryAsync(Func keySelector, Func elementSelector); - Task> ToListAsync(bool includeNestedMembers = false); - Task> ToListAsync(string field); + Task ToDataTableAsync(string field = null, CancellationToken cancellationToken = default); + Task> ToDictionaryAsync(Func keySelector, CancellationToken cancellationToken = default); + Task> ToDictionaryAsync(Func keySelector, Func elementSelector, CancellationToken cancellationToken = default); + Task> ToListAsync(bool includeNestedMembers = false, CancellationToken cancellationToken = default); + Task> ToListAsync(string field, CancellationToken cancellationToken = default); - Task ToOneAsync(); - Task FirstAsync(); + Task ToOneAsync(CancellationToken cancellationToken = default); + Task FirstAsync(CancellationToken cancellationToken = default); - Task AnyAsync(); - Task CountAsync(); + Task AnyAsync(CancellationToken cancellationToken = default); + Task CountAsync(CancellationToken cancellationToken = default); #endif /// diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs index cefb5ced..74372279 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql @@ -13,23 +14,23 @@ namespace FreeSql #if net40 #else - Task AnyAsync(Expression> exp); + Task AnyAsync(Expression> exp, CancellationToken cancellationToken = default); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken = default) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken = default); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken = default); + Task> ToListAsync(CancellationToken cancellationToken = default); - Task ToOneAsync(Expression> select); - Task ToOneAsync(); - Task FirstAsync(Expression> select); - Task FirstAsync(); + Task ToOneAsync(Expression> select, CancellationToken cancellationToken = default); + Task ToOneAsync(CancellationToken cancellationToken = default); + Task FirstAsync(Expression> select, CancellationToken cancellationToken = default); + Task FirstAsync(CancellationToken cancellationToken = default); - Task ToAggregateAsync(Expression, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); + Task ToAggregateAsync(Expression, TReturn>> select, CancellationToken cancellationToken = default); + Task SumAsync(Expression> column, CancellationToken cancellationToken = default); + Task MinAsync(Expression> column, CancellationToken cancellationToken = default); + Task MaxAsync(Expression> column, CancellationToken cancellationToken = default); + Task AvgAsync(Expression> column, CancellationToken cancellationToken = default); #endif /// diff --git a/FreeSql/Interface/Curd/ISelect/ISelect10.cs b/FreeSql/Interface/Curd/ISelect/ISelect10.cs deleted file mode 100644 index 0b1bb45f..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect10.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect11.cs b/FreeSql/Interface/Curd/ISelect/ISelect11.cs deleted file mode 100644 index c5d6a83c..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect11.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect12.cs b/FreeSql/Interface/Curd/ISelect/ISelect12.cs deleted file mode 100644 index c4edcfd2..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect12.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect13.cs b/FreeSql/Interface/Curd/ISelect/ISelect13.cs deleted file mode 100644 index 0f3c7d7f..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect13.cs +++ /dev/null @@ -1,120 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect14.cs b/FreeSql/Interface/Curd/ISelect/ISelect14.cs deleted file mode 100644 index 811dc203..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect14.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect15.cs b/FreeSql/Interface/Curd/ISelect/ISelect15.cs deleted file mode 100644 index c6fad4f6..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect15.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect16.cs b/FreeSql/Interface/Curd/ISelect/ISelect16.cs deleted file mode 100644 index 53cb1950..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect16.cs +++ /dev/null @@ -1,118 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, string sqlT16, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect2.cs b/FreeSql/Interface/Curd/ISelect/ISelect2.cs deleted file mode 100644 index 7949ff3b..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect2.cs +++ /dev/null @@ -1,121 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect2`16.cs b/FreeSql/Interface/Curd/ISelect/ISelect2`16.cs new file mode 100644 index 00000000..b825f8d9 --- /dev/null +++ b/FreeSql/Interface/Curd/ISelect/ISelect2`16.cs @@ -0,0 +1,1631 @@ +using FreeSql.Internal.Model; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using System.Threading; +using System.Threading.Tasks; + +namespace FreeSql +{ + + public interface ISelect : ISelect0, T1> where T2 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class + { +#if net40 +#else + Task AnyAsync(Expression> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); + + Task ToOneAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(Expression> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); + + Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression> column, CancellationToken cancellationToken); + Task MinAsync(Expression> column, CancellationToken cancellationToken); + Task MaxAsync(Expression> column, CancellationToken cancellationToken); + Task AvgAsync(Expression> column, CancellationToken cancellationToken); + + #region HzyTuple 元组 + + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); + + #endregion + +#endif + + bool Any(Expression> exp); + int InsertInto(string tableName, Expression> select) where TTargetEntity : class; + DataTable ToDataTable(Expression> select); + List ToList(Expression> select); + List ToList(); + void ToChunk(Expression> select, int size, Action>> done); + + TReturn ToOne(Expression> select); + TReturn First(Expression> select); + TDto First(); + + string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); + ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); + decimal Sum(Expression> column); + TMember Min(Expression> column); + TMember Max(Expression> column); + double Avg(Expression> column); + + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + + ISelect Where(Expression> exp); + ISelect WhereIf(bool condition, Expression> exp); + + ISelectGrouping> GroupBy(Expression> exp); + + ISelect OrderBy(Expression> column); + ISelect OrderByDescending(Expression> column); + ISelect OrderByIf(bool condition, Expression> column, bool descending = false); + + ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, string sqlT16, object parms = null); + + #region HzyTuple 元组 + + bool Any(Expression, bool>> exp); + int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; + DataTable ToDataTable(Expression, TReturn>> select); + List ToList(Expression, TReturn>> select); + void ToChunk(Expression, TReturn>> select, int size, Action>> done); + + TReturn ToOne(Expression, TReturn>> select); + TReturn First(Expression, TReturn>> select); + + string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); + decimal Sum(Expression, TMember>> column); + TMember Min(Expression, TMember>> column); + TMember Max(Expression, TMember>> column); + double Avg(Expression, TMember>> column); + + ISelect LeftJoin(Expression, bool>> exp); + ISelect InnerJoin(Expression, bool>> exp); + ISelect RightJoin(Expression, bool>> exp); + + ISelect Where(Expression, bool>> exp); + ISelect WhereIf(bool condition, Expression, bool>> exp); + + ISelectGrouping> GroupBy(Expression, TKey>> exp); + + ISelect OrderBy(Expression, TMember>> column); + ISelect OrderByDescending(Expression, TMember>> column); + ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); + + #endregion + + } + +} diff --git a/FreeSql/Interface/Curd/ISelect/ISelect3.cs b/FreeSql/Interface/Curd/ISelect/ISelect3.cs deleted file mode 100644 index fe33ff88..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect3.cs +++ /dev/null @@ -1,121 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect4.cs b/FreeSql/Interface/Curd/ISelect/ISelect4.cs deleted file mode 100644 index b28ab64b..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect4.cs +++ /dev/null @@ -1,120 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect5.cs b/FreeSql/Interface/Curd/ISelect/ISelect5.cs deleted file mode 100644 index bab8b26f..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect5.cs +++ /dev/null @@ -1,122 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect6.cs b/FreeSql/Interface/Curd/ISelect/ISelect6.cs deleted file mode 100644 index c70e04e4..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect6.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect7.cs b/FreeSql/Interface/Curd/ISelect/ISelect7.cs deleted file mode 100644 index b38ab3b4..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect7.cs +++ /dev/null @@ -1,120 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect8.cs b/FreeSql/Interface/Curd/ISelect/ISelect8.cs deleted file mode 100644 index febb1120..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect8.cs +++ /dev/null @@ -1,120 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelect9.cs b/FreeSql/Interface/Curd/ISelect/ISelect9.cs deleted file mode 100644 index ee41d171..00000000 --- a/FreeSql/Interface/Curd/ISelect/ISelect9.cs +++ /dev/null @@ -1,119 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql -{ - - public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class - { - -#if net40 -#else - Task AnyAsync(Expression> exp); - Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression> select); - Task> ToListAsync(Expression> select); - Task> ToListAsync(); - - Task ToOneAsync(Expression> select); - Task FirstAsync(Expression> select); - Task FirstAsync(); - - Task ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - Task SumAsync(Expression> column); - Task MinAsync(Expression> column); - Task MaxAsync(Expression> column); - Task AvgAsync(Expression> column); - - #region HzyTuple 元组 - - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); - - #endregion - -#endif - - bool Any(Expression> exp); - int InsertInto(string tableName, Expression> select) where TTargetEntity : class; - DataTable ToDataTable(Expression> select); - List ToList(Expression> select); - List ToList(); - void ToChunk(Expression> select, int size, Action>> done); - - TReturn ToOne(Expression> select); - TReturn First(Expression> select); - TDto First(); - - string ToSql(Expression> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - TReturn ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select); - ISelect Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result); - decimal Sum(Expression> column); - TMember Min(Expression> column); - TMember Max(Expression> column); - double Avg(Expression> column); - - ISelect LeftJoin(Expression> exp); - ISelect InnerJoin(Expression> exp); - ISelect RightJoin(Expression> exp); - - ISelect Where(Expression> exp); - ISelect WhereIf(bool condition, Expression> exp); - - ISelectGrouping> GroupBy(Expression> exp); - - ISelect OrderBy(Expression> column); - ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression> column, bool descending = false); - - ISelect WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, object parms = null); - - #region HzyTuple 元组 - - bool Any(Expression, bool>> exp); - int InsertInto(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - DataTable ToDataTable(Expression, TReturn>> select); - List ToList(Expression, TReturn>> select); - void ToChunk(Expression, TReturn>> select, int size, Action>> done); - - TReturn ToOne(Expression, TReturn>> select); - TReturn First(Expression, TReturn>> select); - - string ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex); - decimal Sum(Expression, TMember>> column); - TMember Min(Expression, TMember>> column); - TMember Max(Expression, TMember>> column); - double Avg(Expression, TMember>> column); - - ISelect LeftJoin(Expression, bool>> exp); - ISelect InnerJoin(Expression, bool>> exp); - ISelect RightJoin(Expression, bool>> exp); - - ISelect Where(Expression, bool>> exp); - ISelect WhereIf(bool condition, Expression, bool>> exp); - - ISelectGrouping> GroupBy(Expression, TKey>> exp); - - ISelect OrderBy(Expression, TMember>> column); - ISelect OrderByDescending(Expression, TMember>> column); - ISelect OrderByIf(bool condition, Expression, TMember>> column, bool descending = false); - - #endregion - - } - -} \ No newline at end of file diff --git a/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs b/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs index 7e73a743..1e311a29 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelectGrouping.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FreeSql @@ -11,9 +12,9 @@ namespace FreeSql #if net40 #else - Task CountAsync(); - Task> ToListAsync(Expression, TReturn>> select); - Task> ToDictionaryAsync(Expression, TElement>> elementSelector); + Task CountAsync(CancellationToken cancellationToken = default); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken = default); + Task> ToDictionaryAsync(Expression, TElement>> elementSelector, CancellationToken cancellationToken = default); #endif /// diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 9d1d8782..ea4c9606 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -36,7 +36,7 @@ namespace FreeSql.Internal.CommonProvider public List> _includeToList = new List>(); #if net40 #else - public List> _includeToListAsync = new List>(); + public List> _includeToListAsync = new List>(); #endif public Dictionary _includeInfo = new Dictionary(); public bool _distinct; @@ -114,7 +114,7 @@ namespace FreeSql.Internal.CommonProvider to._includeToList = new List>(from._includeToList.ToArray()); #if net40 #else - to._includeToListAsync = new List>(from._includeToListAsync.ToArray()); + to._includeToListAsync = new List>(from._includeToListAsync.ToArray()); #endif to._distinct = from._distinct; to._selectExpression = from._selectExpression; @@ -716,35 +716,35 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - async public Task AnyAsync() + async public Task AnyAsync(CancellationToken cancellationToken = default) { this.Limit(1); - return (await this.ToListAsync($"1{_commonUtils.FieldAsAlias("as1")}")).Sum() > 0; //这里的 Sum 为了分表查询 + return (await this.ToListAsync($"1{_commonUtils.FieldAsAlias("as1")}", cancellationToken)).Sum() > 0; //这里的 Sum 为了分表查询 } - async public Task CountAsync() + async public Task CountAsync(CancellationToken cancellationToken = default) { var tmpOrderBy = _orderby; _orderby = null; try { - return (await this.ToListAsync($"count(1){_commonUtils.FieldAsAlias("as1")}")).Sum(); //这里的 Sum 为了分表查询 + return (await this.ToListAsync($"count(1){_commonUtils.FieldAsAlias("as1")}", cancellationToken)).Sum(); //这里的 Sum 为了分表查询 } finally { _orderby = tmpOrderBy; } } - public virtual Task> ToListAsync(bool includeNestedMembers = false) + public virtual Task> ToListAsync(bool includeNestedMembers = false, CancellationToken cancellationToken = default) { - if (_selectExpression != null) return this.InternalToListAsync(_selectExpression); - return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null); + if (_selectExpression != null) return this.InternalToListAsync(_selectExpression, cancellationToken); + return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null, cancellationToken); } - async public Task ToOneAsync() + async public Task ToOneAsync(CancellationToken cancellationToken = default) { this.Limit(1); - return (await this.ToListAsync()).FirstOrDefault(); + return (await this.ToListAsync(false, cancellationToken)).FirstOrDefault(); } - public Task FirstAsync() => this.ToOneAsync(); + public Task FirstAsync(CancellationToken cancellationToken = default) => this.ToOneAsync(cancellationToken); #endif } } \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index 85fd66ec..91c3f7c8 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -788,7 +788,7 @@ namespace FreeSql.Internal.CommonProvider #region Async #if net40 #else - async public Task ToDataTableAsync(string field = null) + async public Task ToDataTableAsync(string field, CancellationToken cancellationToken) { var sql = this.ToSql(field); var dbParms = _params.ToArray(); @@ -798,7 +798,7 @@ namespace FreeSql.Internal.CommonProvider Exception exception = null; try { - ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); + ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -813,7 +813,7 @@ namespace FreeSql.Internal.CommonProvider return ret; } - async public Task> ToListAsync(string field) + async public Task> ToListAsync(string field, CancellationToken cancellationToken) { var sql = this.ToSql(field); var type = typeof(TTuple); @@ -825,7 +825,7 @@ namespace FreeSql.Internal.CommonProvider try { if (type.IsClass) - ret = await _orm.Ado.QueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); + ret = await _orm.Ado.QueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); else { var flagStr = $"ToListField:{field}"; @@ -834,7 +834,7 @@ namespace FreeSql.Internal.CommonProvider var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils); ret.Add((TTuple)read.Value); return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms); + }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } } catch (Exception ex) @@ -850,7 +850,7 @@ namespace FreeSql.Internal.CommonProvider return ret; } - async internal Task> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData) + async internal Task> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData, CancellationToken cancellationToken) { var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); @@ -871,7 +871,7 @@ namespace FreeSql.Internal.CommonProvider } retCount++; return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms); + }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -883,12 +883,12 @@ namespace FreeSql.Internal.CommonProvider var after = new Aop.CurdAfterEventArgs(before, exception, ret); _orm.Aop.CurdAfterHandler?.Invoke(this, after); } - foreach (var include in _includeToListAsync) await include?.Invoke(ret); + foreach (var include in _includeToListAsync) await include?.Invoke(ret, cancellationToken); _trackToList?.Invoke(ret); return ret; } - internal Task> ToListPrivateAsync(GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData) + internal Task> ToListPrivateAsync(GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData, CancellationToken cancellationToken) { string sql = null; if (otherData?.Length > 0) @@ -901,11 +901,11 @@ namespace FreeSql.Internal.CommonProvider else sql = this.ToSql(af.Field); - return ToListAfPrivateAsync(sql, af, otherData); + return ToListAfPrivateAsync(sql, af, otherData, cancellationToken); } - public Task> ToDictionaryAsync(Func keySelector) => ToDictionaryAsync(keySelector, a => a); - async public Task> ToDictionaryAsync(Func keySelector, Func elementSelector) + public Task> ToDictionaryAsync(Func keySelector, CancellationToken cancellationToken) => ToDictionaryAsync(keySelector, a => a, cancellationToken); + async public Task> ToDictionaryAsync(Func keySelector, Func elementSelector, CancellationToken cancellationToken) { if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); if (elementSelector == null) throw new ArgumentNullException(nameof(elementSelector)); @@ -923,7 +923,7 @@ namespace FreeSql.Internal.CommonProvider var item = af.Read(_orm, fetch.Object); ret.Add(keySelector(item), elementSelector(item)); return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms); + }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -939,7 +939,7 @@ namespace FreeSql.Internal.CommonProvider return ret; } - async internal Task> ToListMrPrivateAsync(string sql, ReadAnonymousTypeAfInfo af, ReadAnonymousTypeOtherInfo[] otherData) + async internal Task> ToListMrPrivateAsync(string sql, ReadAnonymousTypeAfInfo af, ReadAnonymousTypeOtherInfo[] otherData, CancellationToken cancellationToken) { var type = typeof(TReturn); var dbParms = _params.ToArray(); @@ -959,7 +959,7 @@ namespace FreeSql.Internal.CommonProvider other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref index, false, null, retCount, null)); retCount++; return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms); + }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -972,11 +972,11 @@ namespace FreeSql.Internal.CommonProvider _orm.Aop.CurdAfterHandler?.Invoke(this, after); } if (typeof(TReturn) == typeof(T1)) - foreach (var include in _includeToListAsync) await include?.Invoke(ret); + foreach (var include in _includeToListAsync) await include?.Invoke(ret, cancellationToken); _trackToList?.Invoke(ret); return ret; } - internal Task> ToListMapReaderPrivateAsync(ReadAnonymousTypeAfInfo af, ReadAnonymousTypeOtherInfo[] otherData) + internal Task> ToListMapReaderPrivateAsync(ReadAnonymousTypeAfInfo af, ReadAnonymousTypeOtherInfo[] otherData, CancellationToken cancellationToken) { string sql = null; if (otherData?.Length > 0) @@ -989,22 +989,22 @@ namespace FreeSql.Internal.CommonProvider else sql = this.ToSql(af.field); - return ToListMrPrivateAsync(sql, af, otherData); + return ToListMrPrivateAsync(sql, af, otherData, cancellationToken); } - protected Task> ToListMapReaderAsync(ReadAnonymousTypeAfInfo af) => ToListMapReaderPrivateAsync(af, null); + protected Task> ToListMapReaderAsync(ReadAnonymousTypeAfInfo af, CancellationToken cancellationToken) => ToListMapReaderPrivateAsync(af, null, cancellationToken); - async protected Task InternalAvgAsync(Expression exp) + async protected Task InternalAvgAsync(Expression exp, CancellationToken cancellationToken) { - var list = await this.ToListAsync($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}"); + var list = await this.ToListAsync($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}", cancellationToken); return list.Sum() / list.Count; } - async protected Task InternalMaxAsync(Expression exp) => (await this.ToListAsync($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Max(); - async protected Task InternalMinAsync(Expression exp) => (await this.ToListAsync($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Min(); - async protected Task InternalSumAsync(Expression exp) => (await this.ToListAsync($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Sum(); + async protected Task InternalMaxAsync(Expression exp, CancellationToken cancellationToken) => (await this.ToListAsync($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}", cancellationToken)).Max(); + async protected Task InternalMinAsync(Expression exp, CancellationToken cancellationToken) => (await this.ToListAsync($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}", cancellationToken)).Min(); + async protected Task InternalSumAsync(Expression exp, CancellationToken cancellationToken) => (await this.ToListAsync($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}", cancellationToken)).Sum(); - protected Task> InternalToListAsync(Expression select) => this.ToListMapReaderAsync(this.GetExpressionField(select)); + protected Task> InternalToListAsync(Expression select, CancellationToken cancellationToken) => this.ToListMapReaderAsync(this.GetExpressionField(select), cancellationToken); - async public Task InternalInsertIntoAsync(string tableName, Expression select) + async public Task InternalInsertIntoAsync(string tableName, Expression select, CancellationToken cancellationToken) { var sql = this.InternalGetInsertIntoToSql(tableName, select); var dbParms = _params.ToArray(); @@ -1015,7 +1015,7 @@ namespace FreeSql.Internal.CommonProvider Exception exception = null; try { - ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); + ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -1030,7 +1030,7 @@ namespace FreeSql.Internal.CommonProvider return ret; } - async protected Task InternalToDataTableAsync(Expression select) + async protected Task InternalToDataTableAsync(Expression select, CancellationToken cancellationToken) { var sql = this.InternalToSql(select, FieldAliasOptions.AsProperty); //DataTable 使用 AsProperty var dbParms = _params.ToArray(); @@ -1040,7 +1040,7 @@ namespace FreeSql.Internal.CommonProvider Exception exception = null; try { - ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); + ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); } catch (Exception ex) { @@ -1055,7 +1055,7 @@ namespace FreeSql.Internal.CommonProvider return ret; } - async protected Task InternalToAggregateAsync(Expression select) + async protected Task InternalToAggregateAsync(Expression select, CancellationToken cancellationToken) { var tmpOrderBy = _orderby; _orderby = null; //解决 select count(1) from t order by id 这样的 SQL 错误 @@ -1066,7 +1066,7 @@ namespace FreeSql.Internal.CommonProvider var index = 0; _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, null, _whereGlobalFilter, null, false); //不走 DTO 映射,不处理 IncludeMany - return (await this.ToListMapReaderAsync(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null))).FirstOrDefault(); + return (await this.ToListMapReaderAsync(new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null), cancellationToken)).FirstOrDefault(); } finally { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs deleted file mode 100644 index b6f190b8..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ /dev/null @@ -1,481 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select10Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class - { - - public Select10Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select11Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select11Provider.cs deleted file mode 100644 index 5f58506a..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select11Provider.cs +++ /dev/null @@ -1,480 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select11Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class - { - - public Select11Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select12Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select12Provider.cs deleted file mode 100644 index 282edd57..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select12Provider.cs +++ /dev/null @@ -1,483 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select12Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class - { - - public Select12Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select13Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select13Provider.cs deleted file mode 100644 index e89ef83d..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select13Provider.cs +++ /dev/null @@ -1,484 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select13Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class - { - - public Select13Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; - if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select14Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select14Provider.cs deleted file mode 100644 index 2397fc47..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select14Provider.cs +++ /dev/null @@ -1,486 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select14Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class - { - - public Select14Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; - if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; - if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select15Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select15Provider.cs deleted file mode 100644 index c6c878ef..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select15Provider.cs +++ /dev/null @@ -1,489 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select15Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class - { - - public Select15Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T15)), Alias = $"SP10o", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; - if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; - if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; - if (type == _tables[14].Table?.Type && string.IsNullOrEmpty(sqlT15) == false) return $"({sqlT15})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14};\r\n{sqlT15}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n"), Expression.Parameter(typeof(T15), "o")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select16Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select16Provider.cs deleted file mode 100644 index e2fcaa72..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select16Provider.cs +++ /dev/null @@ -1,490 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select16Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class - { - - public Select16Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15), typeof(T16)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T15)), Alias = $"SP10o", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T16)), Alias = $"SP10p", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, string sqlT16, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; - if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; - if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; - if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; - if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; - if (type == _tables[14].Table?.Type && string.IsNullOrEmpty(sqlT15) == false) return $"({sqlT15})"; - if (type == _tables[15].Table?.Type && string.IsNullOrEmpty(sqlT16) == false) return $"({sqlT16})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14};\r\n{sqlT15};\r\n{sqlT16}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n"), Expression.Parameter(typeof(T15), "o"), Expression.Parameter(typeof(T16), "p")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 896d31f7..c336fcf0 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -12,6 +12,7 @@ using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider @@ -633,7 +634,7 @@ namespace FreeSql.Internal.CommonProvider { isAsync = false; #else - Func includeToListSyncOrAsync = async (listObj, isAsync) => + Func includeToListSyncOrAsync = async (listObj, isAsync, cancellationToken) => { #endif @@ -916,8 +917,8 @@ namespace FreeSql.Internal.CommonProvider { #if net40 #else - if (selectExp == null) subList = await subSelect.ToListAfPrivateAsync(sbSql.ToString(), af, null); - else subList = await subSelect.ToListMrPrivateAsync(sbSql.ToString(), mf, null); + if (selectExp == null) subList = await subSelect.ToListAfPrivateAsync(sbSql.ToString(), af, null, cancellationToken); + else subList = await subSelect.ToListMrPrivateAsync(sbSql.ToString(), mf, null, cancellationToken); #endif } else @@ -959,8 +960,8 @@ namespace FreeSql.Internal.CommonProvider { #if net40 #else - if (selectExp == null) subList = await subSelect.ToListAsync(true); - else subList = await subSelect.ToListAsync(selectExp); + if (selectExp == null) subList = await subSelect.ToListAsync(true, cancellationToken); + else subList = await subSelect.ToListAsync(selectExp, cancellationToken); #endif } else @@ -1084,8 +1085,8 @@ namespace FreeSql.Internal.CommonProvider { #if net40 #else - if (selectExp == null) subList = await subSelect.ToListAfPrivateAsync(sbSql.ToString(), af, otherData == null ? null : new[] { new ReadAnonymousTypeOtherInfo(otherData.field, otherData.map, midList) }); - else subList = await subSelect.ToListMrPrivateAsync(sbSql.ToString(), mf, otherData == null ? null : new[] { new ReadAnonymousTypeOtherInfo(otherData.field, otherData.map, midList) }); + if (selectExp == null) subList = await subSelect.ToListAfPrivateAsync(sbSql.ToString(), af, otherData == null ? null : new[] { new ReadAnonymousTypeOtherInfo(otherData.field, otherData.map, midList) }, cancellationToken); + else subList = await subSelect.ToListMrPrivateAsync(sbSql.ToString(), mf, otherData == null ? null : new[] { new ReadAnonymousTypeOtherInfo(otherData.field, otherData.map, midList) }, cancellationToken); #endif } else @@ -1162,10 +1163,10 @@ namespace FreeSql.Internal.CommonProvider #else _includeToList.Add(listObj => { - var task = includeToListSyncOrAsync(listObj, false); + var task = includeToListSyncOrAsync(listObj, false, default); if (task.Exception != null) throw task.Exception.InnerException ?? task.Exception; }); - _includeToListAsync.Add(listObj => includeToListSyncOrAsync(listObj, true)); + _includeToListAsync.Add((listObj, cancellationToken) => includeToListSyncOrAsync(listObj, true, cancellationToken)); #endif var includeValue = new MemberExpression[members.Count + 1]; for (var a = 0; a < members.Count; a++) includeValue[a] = members[a]; @@ -1184,41 +1185,41 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - async internal Task SetListAsync(IEnumerable list) + async internal Task SetListAsync(IEnumerable list, CancellationToken cancellationToken = default) { - foreach (var include in _includeToListAsync) await include?.Invoke(list); + foreach (var include in _includeToListAsync) await include?.Invoke(list, cancellationToken); _trackToList?.Invoke(list); } - public Task AvgAsync(Expression> column) + public Task AvgAsync(Expression> column, CancellationToken cancellationToken = default) { if (column == null) return Task.FromResult(default(double)); _tables[0].Parameter = column.Parameters[0]; - return this.InternalAvgAsync(column?.Body); + return this.InternalAvgAsync(column?.Body, cancellationToken); } - public Task MaxAsync(Expression> column) + public Task MaxAsync(Expression> column, CancellationToken cancellationToken = default) { if (column == null) return Task.FromResult(default(TMember)); _tables[0].Parameter = column.Parameters[0]; - return this.InternalMaxAsync(column?.Body); + return this.InternalMaxAsync(column?.Body, cancellationToken); } - public Task MinAsync(Expression> column) + public Task MinAsync(Expression> column, CancellationToken cancellationToken = default) { if (column == null) return Task.FromResult(default(TMember)); _tables[0].Parameter = column.Parameters[0]; - return this.InternalMinAsync(column?.Body); + return this.InternalMinAsync(column?.Body, cancellationToken); } - public Task SumAsync(Expression> column) + public Task SumAsync(Expression> column, CancellationToken cancellationToken = default) { if (column == null) return Task.FromResult(default(decimal)); _tables[0].Parameter = column.Parameters[0]; - return this.InternalSumAsync(column?.Body); + return this.InternalSumAsync(column?.Body, cancellationToken); } - async public Task> ToListAsync(Expression> select) + async public Task> ToListAsync(Expression> select, CancellationToken cancellationToken = default) { - if (select == null) return await this.InternalToListAsync(select?.Body); + if (select == null) return await this.InternalToListAsync(select?.Body, cancellationToken); _tables[0].Parameter = select.Parameters[0]; - if (_includeToList?.Any() != true) return await this.InternalToListAsync(select.Body); + if (_includeToList?.Any() != true) return await this.InternalToListAsync(select.Body, cancellationToken); var findIncludeMany = new List(); //支持指定已经使用 IncudeMany 的导航属性 var map = new ReadAnonymousTypeInfo(); @@ -1226,7 +1227,7 @@ namespace FreeSql.Internal.CommonProvider var index = 0; _commonExpression.ReadAnonymousField(_tables, field, map, ref index, select.Body, this, null, _whereGlobalFilter, findIncludeMany, true); var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null); - if (findIncludeMany.Any() == false) return await this.ToListMapReaderPrivateAsync(af, null); + if (findIncludeMany.Any() == false) return await this.ToListMapReaderPrivateAsync(af, null, cancellationToken); var parmExp = Expression.Parameter(_tables[0].Table.Type, _tables[0].Alias); var incNewInit = new IncludeManyNewInit(_tables[0].Table, parmExp); @@ -1253,7 +1254,7 @@ namespace FreeSql.Internal.CommonProvider } var otherNewInit = GetIncludeManyNewInitExpression(incNewInit); //获取 IncludeMany 包含的最简化字段 - if (otherNewInit.Bindings.Any() == false) return await this.ToListMapReaderPrivateAsync(af, null); + if (otherNewInit.Bindings.Any() == false) return await this.ToListMapReaderPrivateAsync(af, null, cancellationToken); var otherMap = new ReadAnonymousTypeInfo(); field.Clear(); @@ -1262,8 +1263,8 @@ namespace FreeSql.Internal.CommonProvider var otherAf = new ReadAnonymousTypeOtherInfo(field.ToString(), otherMap, otherRet); af.fillIncludeMany = new List>(); - var ret = await this.ToListMapReaderPrivateAsync(af, new[] { otherAf }); - await this.SetListAsync(otherRet.Select(a => (T1)a).ToList()); //级联加载 + var ret = await this.ToListMapReaderPrivateAsync(af, new[] { otherAf }, cancellationToken); + await this.SetListAsync(otherRet.Select(a => (T1)a).ToList(), cancellationToken); //级联加载 foreach (var fim in af.fillIncludeMany) { @@ -1281,35 +1282,35 @@ namespace FreeSql.Internal.CommonProvider } return ret; } - public Task> ToListAsync() => ToListAsync(GetToListDtoSelector()); + public Task> ToListAsync(CancellationToken cancellationToken = default) => ToListAsync(GetToListDtoSelector(), cancellationToken); - public Task InsertIntoAsync(string tableName, Expression> select) where TTargetEntity : class => base.InternalInsertIntoAsync(tableName, select); + public Task InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken = default) where TTargetEntity : class => base.InternalInsertIntoAsync(tableName, select, cancellationToken); - public Task ToDataTableAsync(Expression> select) + public Task ToDataTableAsync(Expression> select, CancellationToken cancellationToken = default) { - if (select == null) return this.InternalToDataTableAsync(select?.Body); + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); _tables[0].Parameter = select.Parameters[0]; - return this.InternalToDataTableAsync(select?.Body); + return this.InternalToDataTableAsync(select?.Body, cancellationToken); } - public Task ToAggregateAsync(Expression, TReturn>> select) + public Task ToAggregateAsync(Expression, TReturn>> select, CancellationToken cancellationToken = default) { if (select == null) return Task.FromResult(default(TReturn)); _tables[0].Parameter = select.Parameters[0]; - return this.InternalToAggregateAsync(select?.Body); + return this.InternalToAggregateAsync(select?.Body, cancellationToken); } - async public Task AnyAsync(Expression> exp) + async public Task AnyAsync(Expression> exp, CancellationToken cancellationToken = default) { var oldwhere = _where.ToString(); - var ret = await this.Where(exp).AnyAsync(); + var ret = await this.Where(exp).AnyAsync(cancellationToken); _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); - public Task FirstAsync() => this.ToOneAsync(); - public override Task> ToListAsync(bool includeNestedMembers = false) => base.ToListAsync(_isIncluded || includeNestedMembers); + async public Task ToOneAsync(Expression> select, CancellationToken cancellationToken = default) => (await this.Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async public Task ToOneAsync(CancellationToken cancellationToken = default) => (await this.Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + public Task FirstAsync(Expression> select, CancellationToken cancellationToken = default) => this.ToOneAsync(select, cancellationToken); + public Task FirstAsync(CancellationToken cancellationToken = default) => this.ToOneAsync(cancellationToken); + public override Task> ToListAsync(bool includeNestedMembers = false, CancellationToken cancellationToken = default) => base.ToListAsync(_isIncluded || includeNestedMembers, cancellationToken); #endif } } \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider2`16.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider2`16.cs new file mode 100644 index 00000000..6daa6e10 --- /dev/null +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider2`16.cs @@ -0,0 +1,7005 @@ + +using FreeSql.Internal.Model; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; +using System.Threading.Tasks; + +namespace FreeSql.Internal.CommonProvider +{ + + public abstract class Select2Provider : Select0Provider, T1>, ISelect + where T2 : class + { + + public Select2Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select3Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class + { + + public Select3Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select4Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class + { + + public Select4Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select5Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class + { + + public Select5Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select6Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class + { + + public Select6Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select7Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class + { + + public Select7Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select8Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class + { + + public Select8Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select9Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class + { + + public Select9Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select10Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class + { + + public Select10Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select11Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class + { + + public Select11Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select12Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class + { + + public Select12Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select13Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class + { + + public Select13Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; + if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select14Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class + { + + public Select14Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; + if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; + if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select15Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class + { + + public Select15Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T15)), Alias = $"SP10o", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; + if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; + if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; + if (type == _tables[14].Table?.Type && string.IsNullOrEmpty(sqlT15) == false) return $"({sqlT15})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14};\r\n{sqlT15}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n"), Expression.Parameter(typeof(T15), "o")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + + + public abstract class Select16Provider : Select0Provider, T1>, ISelect + where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class + { + + public Select16Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) + { + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15), typeof(T16)); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T10)), Alias = $"SP10j", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T11)), Alias = $"SP10k", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T12)), Alias = $"SP10l", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T13)), Alias = $"SP10m", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T14)), Alias = $"SP10n", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T15)), Alias = $"SP10o", On = null, Type = SelectTableInfoType.From }); + _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T16)), Alias = $"SP10p", On = null, Type = SelectTableInfoType.From }); + + } + + ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, string sqlT10, string sqlT11, string sqlT12, string sqlT13, string sqlT14, string sqlT15, string sqlT16, object parms) + { + this.AsTable((type, old) => + { + if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; + if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; + if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; + if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; + if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; + if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; + if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; + if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; + if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; + if (type == _tables[9].Table?.Type && string.IsNullOrEmpty(sqlT10) == false) return $"({sqlT10})"; + if (type == _tables[10].Table?.Type && string.IsNullOrEmpty(sqlT11) == false) return $"({sqlT11})"; + if (type == _tables[11].Table?.Type && string.IsNullOrEmpty(sqlT12) == false) return $"({sqlT12})"; + if (type == _tables[12].Table?.Type && string.IsNullOrEmpty(sqlT13) == false) return $"({sqlT13})"; + if (type == _tables[13].Table?.Type && string.IsNullOrEmpty(sqlT14) == false) return $"({sqlT14})"; + if (type == _tables[14].Table?.Type && string.IsNullOrEmpty(sqlT15) == false) return $"({sqlT15})"; + if (type == _tables[15].Table?.Type && string.IsNullOrEmpty(sqlT16) == false) return $"({sqlT16})"; + + return old; + }); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9};\r\n{sqlT10};\r\n{sqlT11};\r\n{sqlT12};\r\n{sqlT13};\r\n{sqlT14};\r\n{sqlT15};\r\n{sqlT16}", parms)); + return this; + } + + double ISelect.Avg(Expression> column) + { + if (column == null) return default(double); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvg(column?.Body); + } + + ISelectGrouping> ISelect.GroupBy(Expression> exp) + { + if (exp == null) return this.InternalGroupBy>(exp?.Body); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalGroupBy>(exp?.Body); + } + + TMember ISelect.Max(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMax(column?.Body); + } + + TMember ISelect.Min(Expression> column) + { + if (column == null) return default(TMember); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMin(column?.Body); + } + + ISelect ISelect.OrderBy(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderBy(column?.Body); + } + + ISelect ISelect.OrderByDescending(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalOrderByDescending(column?.Body); + } + + ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) + { + if (condition == false || column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); + } + + decimal ISelect.Sum(Expression> column) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSum(column?.Body); + } + + TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) + { + if (select == null) return default(TReturn); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregate(select?.Body); + } + ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) + { + result = (this as ISelect).ToAggregate(select); + return this; + } + + List ISelect.ToList(Expression> select) + { + if (select == null) return this.InternalToList(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToList(select?.Body); + } + + List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); + Expression> GetToListDtoSelector() + { + return Expression.Lambda>( + typeof(TDto).InternalNewExpression(), + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i"), Expression.Parameter(typeof(T10), "j"), Expression.Parameter(typeof(T11), "k"), Expression.Parameter(typeof(T12), "l"), Expression.Parameter(typeof(T13), "m"), Expression.Parameter(typeof(T14), "n"), Expression.Parameter(typeof(T15), "o"), Expression.Parameter(typeof(T16), "p")); + } + + public void ToChunk(Expression> select, int size, Action>> done) + { + if (select == null || done == null) return; + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + this.InternalToChunk(select.Body, size, done); + } + + DataTable ISelect.ToDataTable(Expression> select) + { + if (select == null) return this.InternalToDataTable(select?.Body); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTable(select?.Body); + } + + int ISelect.InsertInto(string tableName, Expression> select) + { + if (select == null) return this.InternalInsertInto(tableName, select); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertInto(tableName, select?.Body); + } + + string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) + { + if (select == null) return this.InternalToSql(select?.Body, fieldAlias); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToSql(select?.Body, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + + ISelect ISelect.Where(Expression> exp) + { + if (exp == null) return this.Where(null); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + ISelect ISelect.WhereIf(bool condition, Expression> exp) + { + if (condition == false || exp == null) return this; + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); + } + + bool ISelect.Any(Expression> exp) + { + if (exp == null) return this.Any(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); + _where.Clear().Append(oldwhere); + return ret; + } + + TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); + + + + + + #region HzyTuple 元组 + + double ISelect.Avg(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Avg((Expression>)expModify); + } + + ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).GroupBy((Expression>)expModify); + } + + TMember ISelect.Max(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Max((Expression>)expModify); + } + + TMember ISelect.Min(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Min((Expression>)expModify); + } + + ISelect ISelect.OrderBy(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderBy((Expression>)expModify); + } + + ISelect ISelect.OrderByDescending(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByDescending((Expression>)expModify); + } + + ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); + } + + decimal ISelect.Sum(Expression, TMember>> column) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).Sum((Expression>)expModify); + } + + List ISelect.ToList(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToList((Expression>)expModify); + } + + public void ToChunk(Expression, TReturn>> select, int size, Action>> done) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + (this as ISelect).ToChunk((Expression>)expModify, size, done); + } + + DataTable ISelect.ToDataTable(Expression, TReturn>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTable((Expression>)expModify); + } + + int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertInto(tableName, (Expression>)expModify); + } + + string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); + } + + ISelect ISelect.LeftJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).LeftJoin((Expression>)expModify); + } + + ISelect ISelect.InnerJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).InnerJoin((Expression>)expModify); + } + + ISelect ISelect.RightJoin(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).RightJoin((Expression>)expModify); + } + + ISelect ISelect.Where(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Where((Expression>)expModify); + } + + ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).WhereIf(condition, (Expression>)expModify); + } + + bool ISelect.Any(Expression, bool>> exp) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return (this as ISelect).Any((Expression>)expModify); + } + + TReturn ISelect.ToOne(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + TReturn ISelect.First(Expression, TReturn>> select) + => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); + + #endregion + + + +#if net40 +#else + Task ISelect.AvgAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(double)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalAvgAsync(column?.Body, cancellationToken); + } + + Task ISelect.MaxAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMaxAsync(column?.Body, cancellationToken); + } + + Task ISelect.MinAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) return Task.FromResult(default(TMember)); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalMinAsync(column?.Body, cancellationToken); + } + + Task ISelect.SumAsync(Expression> column, CancellationToken cancellationToken) + { + if (column == null) this.InternalOrderBy(column?.Body); + for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; + return this.InternalSumAsync(column?.Body, cancellationToken); + } + + Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, CancellationToken cancellationToken) + { + if (select == null) return Task.FromResult(default(TReturn)); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToAggregateAsync(select?.Body, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToListAsync(select?.Body, cancellationToken); + } + Task> ISelect.ToListAsync(CancellationToken cancellationToken) => (this as ISelect).ToListAsync(GetToListDtoSelector(), cancellationToken); + + Task ISelect.ToDataTableAsync(Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalToDataTableAsync(select?.Body, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression> select, CancellationToken cancellationToken) + { + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); + for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression> exp, CancellationToken cancellationToken) + { + if (exp == null) return await this.AnyAsync(); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + var oldwhere = _where.ToString(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); + _where.Clear().Append(oldwhere); + return ret; + } + + async Task ISelect.ToOneAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression> select, CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); + + + + + #region HzyTuple 元组 + + Task ISelect.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).AvgAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MaxAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).MinAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); + return (this as ISelect).SumAsync((Expression>)expModify, cancellationToken); + } + + Task> ISelect.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToListAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).ToDataTableAsync((Expression>)expModify, cancellationToken); + } + + Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); + return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify, cancellationToken); + } + + async Task ISelect.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) + { + var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); + return await (this as ISelect).AnyAsync((Expression>)expModify, cancellationToken); + } + + async Task ISelect.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + + + #endregion + +#endif + } + + +} + + diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs deleted file mode 100644 index 1e550e25..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ /dev/null @@ -1,462 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - public abstract class Select2Provider : Select0Provider, T1>, ISelect - where T2 : class - { - - public Select2Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs deleted file mode 100644 index 8d7f5b40..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ /dev/null @@ -1,464 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - public abstract class Select3Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class - { - - public Select3Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs deleted file mode 100644 index 5890fa7f..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ /dev/null @@ -1,468 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select4Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class - { - - public Select4Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs deleted file mode 100644 index 7ce48dac..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ /dev/null @@ -1,468 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - public abstract class Select5Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class - { - - public Select5Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs deleted file mode 100644 index 7c39a101..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ /dev/null @@ -1,469 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - public abstract class Select6Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class - { - - public Select6Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs deleted file mode 100644 index 117039f2..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ /dev/null @@ -1,477 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - - - public abstract class Select7Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class - { - - public Select7Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs deleted file mode 100644 index 10f6a5a6..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ /dev/null @@ -1,474 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - public abstract class Select8Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class - { - - public Select8Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs deleted file mode 100644 index 186d3d17..00000000 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ /dev/null @@ -1,476 +0,0 @@ -using FreeSql.Internal.Model; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; - -namespace FreeSql.Internal.CommonProvider -{ - - public abstract class Select9Provider : Select0Provider, T1>, ISelect - where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class - { - - public Select9Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) - { - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9)); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T2)), Alias = $"SP10b", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T3)), Alias = $"SP10c", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T4)), Alias = $"SP10d", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T5)), Alias = $"SP10e", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T6)), Alias = $"SP10f", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T7)), Alias = $"SP10g", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T8)), Alias = $"SP10h", On = null, Type = SelectTableInfoType.From }); - _tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T9)), Alias = $"SP10i", On = null, Type = SelectTableInfoType.From }); - - } - - ISelect ISelect.WithSql(string sqlT1, string sqlT2, string sqlT3, string sqlT4, string sqlT5, string sqlT6, string sqlT7, string sqlT8, string sqlT9, object parms) - { - this.AsTable((type, old) => - { - if (type == _tables[0].Table?.Type && string.IsNullOrEmpty(sqlT1) == false) return $"({sqlT1})"; - if (type == _tables[1].Table?.Type && string.IsNullOrEmpty(sqlT2) == false) return $"({sqlT2})"; - if (type == _tables[2].Table?.Type && string.IsNullOrEmpty(sqlT3) == false) return $"({sqlT3})"; - if (type == _tables[3].Table?.Type && string.IsNullOrEmpty(sqlT4) == false) return $"({sqlT4})"; - if (type == _tables[4].Table?.Type && string.IsNullOrEmpty(sqlT5) == false) return $"({sqlT5})"; - if (type == _tables[5].Table?.Type && string.IsNullOrEmpty(sqlT6) == false) return $"({sqlT6})"; - if (type == _tables[6].Table?.Type && string.IsNullOrEmpty(sqlT7) == false) return $"({sqlT7})"; - if (type == _tables[7].Table?.Type && string.IsNullOrEmpty(sqlT8) == false) return $"({sqlT8})"; - if (type == _tables[8].Table?.Type && string.IsNullOrEmpty(sqlT9) == false) return $"({sqlT9})"; - - return old; - }); - if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT1};\r\n{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};\r\n{sqlT9}", parms)); - return this; - } - - double ISelect.Avg(Expression> column) - { - if (column == null) return default(double); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvg(column?.Body); - } - - ISelectGrouping> ISelect.GroupBy(Expression> exp) - { - if (exp == null) return this.InternalGroupBy>(exp?.Body); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalGroupBy>(exp?.Body); - } - - TMember ISelect.Max(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMax(column?.Body); - } - - TMember ISelect.Min(Expression> column) - { - if (column == null) return default(TMember); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMin(column?.Body); - } - - ISelect ISelect.OrderBy(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderBy(column?.Body); - } - - ISelect ISelect.OrderByDescending(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalOrderByDescending(column?.Body); - } - - ISelect ISelect.OrderByIf(bool condition, Expression> column, bool descending) - { - if (condition == false || column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return descending ? this.InternalOrderByDescending(column?.Body) : this.InternalOrderBy(column?.Body); - } - - decimal ISelect.Sum(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSum(column?.Body); - } - - TReturn ISelect.ToAggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return default(TReturn); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregate(select?.Body); - } - ISelect ISelect.Aggregate(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select, out TReturn result) - { - result = (this as ISelect).ToAggregate(select); - return this; - } - - List ISelect.ToList(Expression> select) - { - if (select == null) return this.InternalToList(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToList(select?.Body); - } - - List ISelect.ToList() => (this as ISelect).ToList(GetToListDtoSelector()); - Expression> GetToListDtoSelector() - { - return Expression.Lambda>( - typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b"), Expression.Parameter(typeof(T3), "c"), Expression.Parameter(typeof(T4), "d"), Expression.Parameter(typeof(T5), "e"), Expression.Parameter(typeof(T6), "f"), Expression.Parameter(typeof(T7), "g"), Expression.Parameter(typeof(T8), "h"), Expression.Parameter(typeof(T9), "i")); - } - - public void ToChunk(Expression> select, int size, Action>> done) - { - if (select == null || done == null) return; - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - this.InternalToChunk(select.Body, size, done); - } - - DataTable ISelect.ToDataTable(Expression> select) - { - if (select == null) return this.InternalToDataTable(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTable(select?.Body); - } - - int ISelect.InsertInto(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertInto(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertInto(tableName, select?.Body); - } - - string ISelect.ToSql(Expression> select, FieldAliasOptions fieldAlias) - { - if (select == null) return this.InternalToSql(select?.Body, fieldAlias); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToSql(select?.Body, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - } - - ISelect ISelect.InnerJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); - } - - ISelect ISelect.RightJoin(Expression> exp) - { - if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); - } - - ISelect ISelect.Where(Expression> exp) - { - if (exp == null) return this.Where(null); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - ISelect ISelect.WhereIf(bool condition, Expression> exp) - { - if (condition == false || exp == null) return this; - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); - } - - bool ISelect.Any(Expression> exp) - { - if (exp == null) return this.Any(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).Any(); - _where.Clear().Append(oldwhere); - return ret; - } - - TReturn ISelect.ToOne(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression> select) => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TDto ISelect.First() => (this as ISelect).Limit(1).ToList().FirstOrDefault(); - - - - - - #region HzyTuple 元组 - - double ISelect.Avg(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Avg((Expression>)expModify); - } - - ISelectGrouping> ISelect.GroupBy(Expression, TKey>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).GroupBy((Expression>)expModify); - } - - TMember ISelect.Max(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Max((Expression>)expModify); - } - - TMember ISelect.Min(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Min((Expression>)expModify); - } - - ISelect ISelect.OrderBy(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderBy((Expression>)expModify); - } - - ISelect ISelect.OrderByDescending(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByDescending((Expression>)expModify); - } - - ISelect ISelect.OrderByIf(bool condition, Expression, TMember>> column, bool descending) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).OrderByIf(condition, (Expression>)expModify, descending); - } - - decimal ISelect.Sum(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).Sum((Expression>)expModify); - } - - List ISelect.ToList(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToList((Expression>)expModify); - } - - public void ToChunk(Expression, TReturn>> select, int size, Action>> done) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - (this as ISelect).ToChunk((Expression>)expModify, size, done); - } - - DataTable ISelect.ToDataTable(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTable((Expression>)expModify); - } - - int ISelect.InsertInto(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertInto(tableName, (Expression>)expModify); - } - - string ISelect.ToSql(Expression, TReturn>> select, FieldAliasOptions fieldAlias) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToSql((Expression>)expModify, fieldAlias); - } - - ISelect ISelect.LeftJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).LeftJoin((Expression>)expModify); - } - - ISelect ISelect.InnerJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).InnerJoin((Expression>)expModify); - } - - ISelect ISelect.RightJoin(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).RightJoin((Expression>)expModify); - } - - ISelect ISelect.Where(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Where((Expression>)expModify); - } - - ISelect ISelect.WhereIf(bool condition, Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).WhereIf(condition, (Expression>)expModify); - } - - bool ISelect.Any(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return (this as ISelect).Any((Expression>)expModify); - } - - TReturn ISelect.ToOne(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - TReturn ISelect.First(Expression, TReturn>> select) - => (this as ISelect).Limit(1).ToList(select).FirstOrDefault(); - - #endregion - - - -#if net40 -#else - Task ISelect.AvgAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(double)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); - } - - Task ISelect.MaxAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); - } - - Task ISelect.MinAsync(Expression> column) - { - if (column == null) return Task.FromResult(default(TMember)); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); - } - - Task ISelect.SumAsync(Expression> column) - { - if (column == null) this.InternalOrderBy(column?.Body); - for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); - } - - Task ISelect.ToAggregateAsync(Expression, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, ISelectGroupingAggregate, TReturn>> select) - { - if (select == null) return Task.FromResult(default(TReturn)); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); - } - - Task> ISelect.ToListAsync(Expression> select) - { - if (select == null) return this.InternalToListAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); - } - Task> ISelect.ToListAsync() => (this as ISelect).ToListAsync(GetToListDtoSelector()); - - Task ISelect.ToDataTableAsync(Expression> select) - { - if (select == null) return this.InternalToDataTableAsync(select?.Body); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression> select) - { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); - for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); - } - - async Task ISelect.AnyAsync(Expression> exp) - { - if (exp == null) return await this.AnyAsync(); - for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); - _where.Clear().Append(oldwhere); - return ret; - } - - async Task ISelect.ToOneAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression> select) => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync() => (await (this as ISelect).Limit(1).ToListAsync()).FirstOrDefault(); - - - - - #region HzyTuple 元组 - - Task ISelect.AvgAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).AvgAsync((Expression>)expModify); - } - - Task ISelect.MaxAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MaxAsync((Expression>)expModify); - } - - Task ISelect.MinAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).MinAsync((Expression>)expModify); - } - - Task ISelect.SumAsync(Expression, TMember>> column) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect).SumAsync((Expression>)expModify); - } - - Task> ISelect.ToListAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToListAsync((Expression>)expModify); - } - - Task ISelect.ToDataTableAsync(Expression, TReturn>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).ToDataTableAsync((Expression>)expModify); - } - - Task ISelect.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect).InsertIntoAsync(tableName, (Expression>)expModify); - } - - async Task ISelect.AnyAsync(Expression, bool>> exp) - { - var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect).AnyAsync((Expression>)expModify); - } - - async Task ISelect.ToOneAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect.FirstAsync(Expression, TReturn>> select) - => (await (this as ISelect).Limit(1).ToListAsync(select)).FirstOrDefault(); - - - #endregion - -#endif - } - -} \ No newline at end of file diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs index 33299b9f..44c1b28d 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider @@ -98,7 +99,7 @@ namespace FreeSql.Internal.CommonProvider var method = _select.GetType().GetMethod("OrderBy", new[] { typeof(string), typeof(object) }); method.Invoke(_select, new object[] { isDescending ? $"{sql} DESC" : sql, null }); } - public object InternalToList(Expression select, Type elementType, bool isAsync) + public object InternalToList(Expression select, Type elementType) { var map = new ReadAnonymousTypeInfo(); var field = new StringBuilder(); @@ -106,7 +107,7 @@ namespace FreeSql.Internal.CommonProvider _comonExp.ReadAnonymousField(null, field, map, ref index, select, null, this, null, null, false); if (map.Childs.Any() == false && map.MapType == null) map.MapType = elementType; - var method = _select.GetType().GetMethod(isAsync ? "ToListMapReaderAsync" : "ToListMapReader", BindingFlags.Instance | BindingFlags.NonPublic); + var method = _select.GetType().GetMethod("ToListMapReader", BindingFlags.Instance | BindingFlags.NonPublic); method = method.MakeGenericMethod(elementType); return method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }); } @@ -194,15 +195,26 @@ namespace FreeSql.Internal.CommonProvider } public List Select(Expression, TReturn>> select) => ToList(select); - public List ToList(Expression, TReturn>> select) => InternalToList(select, typeof(TReturn), false) as List; + public List ToList(Expression, TReturn>> select) => InternalToList(select, typeof(TReturn)) as List; public Dictionary ToDictionary(Expression, TElement>> elementSelector) => InternalToKeyValuePairs(elementSelector, typeof(TElement)).ToDictionary(a => (TKey)a.Key, a => (TElement)a.Value); #if net40 #else - async public Task CountAsync() => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_select._connection, _select._transaction, CommandType.Text, $"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta", _select._commandTimeout, _select._params.ToArray())), out var trylng) ? trylng : default(long); + async public Task CountAsync(CancellationToken cancellationToken = default) => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_select._connection, _select._transaction, CommandType.Text, $"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta", _select._commandTimeout, _select._params.ToArray(), cancellationToken)), out var trylng) ? trylng : default(long); - public Task> ToListAsync(Expression, TReturn>> select) => InternalToList(select, typeof(TReturn), true) as Task>; - async public Task> ToDictionaryAsync(Expression, TElement>> elementSelector) + public Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken = default) + { + var map = new ReadAnonymousTypeInfo(); + var field = new StringBuilder(); + var index = 0; + + _comonExp.ReadAnonymousField(null, field, map, ref index, select, null, this, null, null, false); + if (map.Childs.Any() == false && map.MapType == null) map.MapType = typeof(TReturn); + var method = _select.GetType().GetMethod("ToListMapReaderAsync", BindingFlags.Instance | BindingFlags.NonPublic); + method = method.MakeGenericMethod(typeof(TReturn)); + return method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null), cancellationToken }) as Task>; + } + async public Task> ToDictionaryAsync(Expression, TElement>> elementSelector, CancellationToken cancellationToken = default) { var map = new ReadAnonymousTypeInfo(); var field = new StringBuilder(); @@ -213,7 +225,7 @@ namespace FreeSql.Internal.CommonProvider var method = _select.GetType().GetMethod("ToListMapReaderPrivateAsync", BindingFlags.Instance | BindingFlags.NonPublic); method = method.MakeGenericMethod(typeof(TElement)); var otherAf = new ReadAnonymousTypeOtherInfo(_field, _map, new List()); - var values = await (method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null), new[] { otherAf } }) as Task>); + var values = await (method.Invoke(_select, new object[] { new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null), new[] { otherAf }, cancellationToken }) as Task>); return otherAf.retlist.Select((a, b) => new KeyValuePair((TKey)a, values[b])).ToDictionary(a => a.Key, a => a.Value); } #endif diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect.tt b/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect2`16.tt similarity index 81% rename from FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect.tt rename to FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect2`16.tt index ad346020..e4064230 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect.tt +++ b/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/ISelect2`16.tt @@ -3,9 +3,10 @@ <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> +<#@ output extension=".cs" #> <# - if (1 == 2) + if (1 == 1) { #> using FreeSql.Internal.Model; @@ -13,6 +14,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Linq.Expressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql @@ -49,36 +51,36 @@ public interface ISelect<<#=NewStr #>> : ISelect0>, T1> <#= #if net40 #else - Task AnyAsync(Expression, bool>> exp); - Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression, TReturn>> select); - Task> ToListAsync(Expression, TReturn>> select); - Task> ToListAsync(); + Task AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(CancellationToken cancellationToken); - Task ToOneAsync(Expression, TReturn>> select); - Task FirstAsync(Expression, TReturn>> select); - Task FirstAsync(); + Task ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(CancellationToken cancellationToken); - Task ToAggregateAsync(Expression, TReturn>> select); - Task SumAsync(Expression, TMember>> column); - Task MinAsync(Expression, TMember>> column); - Task MaxAsync(Expression, TMember>> column); - Task AvgAsync(Expression, TMember>> column); + Task ToAggregateAsync(Expression, TReturn>> select, CancellationToken cancellationToken); + Task SumAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken); #region HzyTuple 元组 - Task AnyAsync(Expression>, bool>> exp); - Task InsertIntoAsync(string tableName, Expression>, TTargetEntity>> select) where TTargetEntity : class; - Task ToDataTableAsync(Expression>, TReturn>> select); - Task> ToListAsync(Expression>, TReturn>> select); + Task AnyAsync(Expression>, bool>> exp, CancellationToken cancellationToken); + Task InsertIntoAsync(string tableName, Expression>, TTargetEntity>> select, CancellationToken cancellationToken) where TTargetEntity : class; + Task ToDataTableAsync(Expression>, TReturn>> select, CancellationToken cancellationToken); + Task> ToListAsync(Expression>, TReturn>> select, CancellationToken cancellationToken); - Task ToOneAsync(Expression>, TReturn>> select); - Task FirstAsync(Expression>, TReturn>> select); + Task ToOneAsync(Expression>, TReturn>> select, CancellationToken cancellationToken); + Task FirstAsync(Expression>, TReturn>> select, CancellationToken cancellationToken); - Task SumAsync(Expression>, TMember>> column); - Task MinAsync(Expression>, TMember>> column); - Task MaxAsync(Expression>, TMember>> column); - Task AvgAsync(Expression>, TMember>> column); + Task SumAsync(Expression>, TMember>> column, CancellationToken cancellationToken); + Task MinAsync(Expression>, TMember>> column, CancellationToken cancellationToken); + Task MaxAsync(Expression>, TMember>> column, CancellationToken cancellationToken); + Task AvgAsync(Expression>, TMember>> column, CancellationToken cancellationToken); #endregion diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/SelectProvider.tt b/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/Select1Provider2`16.tt similarity index 87% rename from FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/SelectProvider.tt rename to FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/Select1Provider2`16.tt index 2c5314e9..a52eb6ba 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/SelectProvider.tt +++ b/FreeSql/Internal/CommonProvider/SelectProvider/T4Temp/Select1Provider2`16.tt @@ -3,6 +3,7 @@ <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> +<#@ output extension=".cs" #> <# if (1 == 2) @@ -14,12 +15,12 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider { - - <# +<# var Str = ""; var whereStr = ""; var ISelectGroupingAggregate = new List(); @@ -40,9 +41,7 @@ namespace FreeSql.Internal.CommonProvider { Str += "T" + i + ","; var NewStr = Str.Substring(0, Str.Length - 1); -#> - - <# +#><# if (i > 1) { whereStr += $"where T{i} : class "; @@ -50,9 +49,7 @@ namespace FreeSql.Internal.CommonProvider _tables.Append("_tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T" + i + ")), Alias = $\"SP10" + abc[i - 1] + "\", On = null, Type = SelectTableInfoType.From });\r\n"); - } #> - - <# + } #><# { ISelectGroupingAggregate.Add($"ISelectGroupingAggregate"); WithSql.Add($"string sqlT{i}"); @@ -62,9 +59,7 @@ namespace FreeSql.Internal.CommonProvider ") == false) return $\"({sqlT" + i + "})\";\r\n"); GetDbParamtersByObject.Add("{sqlT" + i + "}"); - } #> - - <# + } #><# if (i == 1) continue; #> public abstract class Select<#=i #>Provider<<#=NewStr #>> : Select0Provider>, T1>, ISelect<<#=NewStr #>> @@ -379,134 +374,134 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - Task ISelect<<#=NewStr #>>.AvgAsync(Expression, TMember>> column) + Task ISelect<<#=NewStr #>>.AvgAsync(Expression, TMember>> column, CancellationToken cancellationToken) { if (column == null) return Task.FromResult(default(double)); for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalAvgAsync(column?.Body); + return this.InternalAvgAsync(column?.Body, cancellationToken); } - Task ISelect<<#=NewStr #>>.MaxAsync(Expression, TMember>> column) + Task ISelect<<#=NewStr #>>.MaxAsync(Expression, TMember>> column, CancellationToken cancellationToken) { if (column == null) return Task.FromResult(default(TMember)); for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMaxAsync(column?.Body); + return this.InternalMaxAsync(column?.Body, cancellationToken); } - Task ISelect<<#=NewStr #>>.MinAsync(Expression, TMember>> column) + Task ISelect<<#=NewStr #>>.MinAsync(Expression, TMember>> column, CancellationToken cancellationToken) { if (column == null) return Task.FromResult(default(TMember)); for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalMinAsync(column?.Body); + return this.InternalMinAsync(column?.Body, cancellationToken); } - Task ISelect<<#=NewStr #>>.SumAsync(Expression, TMember>> column) + Task ISelect<<#=NewStr #>>.SumAsync(Expression, TMember>> column, CancellationToken cancellationToken) { if (column == null) this.InternalOrderBy(column?.Body); for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a]; - return this.InternalSumAsync(column?.Body); + return this.InternalSumAsync(column?.Body, cancellationToken); } - Task ISelect<<#=NewStr #>>.ToAggregateAsync(Expression, TReturn>> select) + Task ISelect<<#=NewStr #>>.ToAggregateAsync(Expression, TReturn>> select, CancellationToken cancellationToken) { if (select == null) return Task.FromResult(default(TReturn)); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToAggregateAsync(select?.Body); + return this.InternalToAggregateAsync(select?.Body, cancellationToken); } - Task> ISelect<<#=NewStr #>>.ToListAsync(Expression, TReturn>> select) + Task> ISelect<<#=NewStr #>>.ToListAsync(Expression, TReturn>> select, CancellationToken cancellationToken) { - if (select == null) return this.InternalToListAsync(select?.Body); + if (select == null) return this.InternalToListAsync(select?.Body, cancellationToken); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToListAsync(select?.Body); + return this.InternalToListAsync(select?.Body, cancellationToken); } - Task> ISelect<<#=NewStr #>>.ToListAsync() => (this as ISelect<<#=NewStr #>>).ToListAsync(GetToListDtoSelector()); + Task> ISelect<<#=NewStr #>>.ToListAsync(CancellationToken cancellationToken) => (this as ISelect<<#=NewStr #>>).ToListAsync(GetToListDtoSelector(), cancellationToken); - Task ISelect<<#=NewStr #>>.ToDataTableAsync(Expression, TReturn>> select) + Task ISelect<<#=NewStr #>>.ToDataTableAsync(Expression, TReturn>> select, CancellationToken cancellationToken) { - if (select == null) return this.InternalToDataTableAsync(select?.Body); + if (select == null) return this.InternalToDataTableAsync(select?.Body, cancellationToken); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalToDataTableAsync(select?.Body); + return this.InternalToDataTableAsync(select?.Body, cancellationToken); } - Task ISelect<<#=NewStr #>>.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select) + Task ISelect<<#=NewStr #>>.InsertIntoAsync(string tableName, Expression, TTargetEntity>> select, CancellationToken cancellationToken) { - if (select == null) return this.InternalInsertIntoAsync(tableName, select); + if (select == null) return this.InternalInsertIntoAsync(tableName, select, cancellationToken); for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a]; - return this.InternalInsertIntoAsync(tableName, select?.Body); + return this.InternalInsertIntoAsync(tableName, select?.Body, cancellationToken); } - async Task ISelect<<#=NewStr #>>.AnyAsync(Expression, bool>> exp) + async Task ISelect<<#=NewStr #>>.AnyAsync(Expression, bool>> exp, CancellationToken cancellationToken) { if (exp == null) return await this.AnyAsync(); for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; var oldwhere = _where.ToString(); - var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(); + var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken); _where.Clear().Append(oldwhere); return ret; } - async Task ISelect<<#=NewStr #>>.ToOneAsync(Expression, TReturn>> select) => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect<<#=NewStr #>>.FirstAsync(Expression, TReturn>> select) => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect<<#=NewStr #>>.FirstAsync() => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync()).FirstOrDefault(); + async Task ISelect<<#=NewStr #>>.ToOneAsync(Expression, TReturn>> select, CancellationToken cancellationToken) => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect<<#=NewStr #>>.FirstAsync(Expression, TReturn>> select, CancellationToken cancellationToken) => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect<<#=NewStr #>>.FirstAsync(CancellationToken cancellationToken) => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(cancellationToken)).FirstOrDefault(); #region HzyTuple 元组 - Task ISelect<<#=NewStr #>>.AvgAsync(Expression>, TMember>> column) + Task ISelect<<#=NewStr #>>.AvgAsync(Expression>, TMember>> column, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect<<#=NewStr #>>).AvgAsync((Expression, TMember>>)expModify); + return (this as ISelect<<#=NewStr #>>).AvgAsync((Expression, TMember>>)expModify, cancellationToken); } - Task ISelect<<#=NewStr #>>.MaxAsync(Expression>, TMember>> column) + Task ISelect<<#=NewStr #>>.MaxAsync(Expression>, TMember>> column, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect<<#=NewStr #>>).MaxAsync((Expression, TMember>>)expModify); + return (this as ISelect<<#=NewStr #>>).MaxAsync((Expression, TMember>>)expModify, cancellationToken); } - Task ISelect<<#=NewStr #>>.MinAsync(Expression>, TMember>> column) + Task ISelect<<#=NewStr #>>.MinAsync(Expression>, TMember>> column, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect<<#=NewStr #>>).MinAsync((Expression, TMember>>)expModify); + return (this as ISelect<<#=NewStr #>>).MinAsync((Expression, TMember>>)expModify, cancellationToken); } - Task ISelect<<#=NewStr #>>.SumAsync(Expression>, TMember>> column) + Task ISelect<<#=NewStr #>>.SumAsync(Expression>, TMember>> column, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables); - return (this as ISelect<<#=NewStr #>>).SumAsync((Expression, TMember>>)expModify); + return (this as ISelect<<#=NewStr #>>).SumAsync((Expression, TMember>>)expModify, cancellationToken); } - Task> ISelect<<#=NewStr #>>.ToListAsync(Expression>, TReturn>> select) + Task> ISelect<<#=NewStr #>>.ToListAsync(Expression>, TReturn>> select, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect<<#=NewStr #>>).ToListAsync((Expression, TReturn>>)expModify); + return (this as ISelect<<#=NewStr #>>).ToListAsync((Expression, TReturn>>)expModify, cancellationToken); } - Task ISelect<<#=NewStr #>>.ToDataTableAsync(Expression>, TReturn>> select) + Task ISelect<<#=NewStr #>>.ToDataTableAsync(Expression>, TReturn>> select, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect<<#=NewStr #>>).ToDataTableAsync((Expression, TReturn>>)expModify); + return (this as ISelect<<#=NewStr #>>).ToDataTableAsync((Expression, TReturn>>)expModify, cancellationToken); } - Task ISelect<<#=NewStr #>>.InsertIntoAsync(string tableName, Expression>, TTargetEntity>> select) + Task ISelect<<#=NewStr #>>.InsertIntoAsync(string tableName, Expression>, TTargetEntity>> select, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(select, _tables); - return (this as ISelect<<#=NewStr #>>).InsertIntoAsync(tableName,(Expression, TTargetEntity>>)expModify); + return (this as ISelect<<#=NewStr #>>).InsertIntoAsync(tableName,(Expression, TTargetEntity>>)expModify, cancellationToken); } - async Task ISelect<<#=NewStr #>>.AnyAsync(Expression>, bool>> exp) + async Task ISelect<<#=NewStr #>>.AnyAsync(Expression>, bool>> exp, CancellationToken cancellationToken) { var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - return await (this as ISelect<<#=NewStr #>>).AnyAsync((Expression, bool>>)expModify); + return await (this as ISelect<<#=NewStr #>>).AnyAsync((Expression, bool>>)expModify, cancellationToken); } - async Task ISelect<<#=NewStr #>>.ToOneAsync(Expression>, TReturn>> select) - => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select)).FirstOrDefault(); - async Task ISelect<<#=NewStr #>>.FirstAsync(Expression>, TReturn>> select) - => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select)).FirstOrDefault(); + async Task ISelect<<#=NewStr #>>.ToOneAsync(Expression>, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); + async Task ISelect<<#=NewStr #>>.FirstAsync(Expression>, TReturn>> select, CancellationToken cancellationToken) + => (await (this as ISelect<<#=NewStr #>>).Limit(1).ToListAsync(select, cancellationToken)).FirstOrDefault(); #endregion diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs index 87c24e7c..ed18ca2c 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using System.Threading; #if MySqlConnector using MySqlConnector; #else @@ -89,7 +90,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions } #if net40 #else - async public static Task ExecuteMySqlBulkCopyAsync(this IInsert that, int? bulkCopyTimeout = null) where T : class + async public static Task ExecuteMySqlBulkCopyAsync(this IInsert that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.MySql.Curd.MySqlInsert; if (insert == null) throw new Exception("ExecuteMySqlBulkCopyAsync 是 FreeSql.Provider.MySqlConnector 特有的功能"); @@ -101,7 +102,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions { if (bulkCopyTimeout.HasValue) bulkCopy.BulkCopyTimeout = bulkCopyTimeout.Value; bulkCopy.DestinationTableName = dt.TableName; - return bulkCopy.WriteToServerAsync(dt); + return bulkCopy.WriteToServerAsync(dt, cancellationToken); }; try @@ -124,7 +125,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions if (conn.State != System.Data.ConnectionState.Open) { isNotOpen = true; - conn.Open(); + await conn.OpenAsync(cancellationToken); } try { @@ -133,7 +134,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions finally { if (isNotOpen) - conn.Close(); + await conn.CloseAsync(); } } else diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs index b2c75baf..265f9747 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs @@ -5,6 +5,7 @@ using System; using System.Data; using System.Linq.Expressions; using System.Text; +using System.Threading; using System.Threading.Tasks; public static partial class FreeSqlPostgreSQLGlobalExtensions @@ -119,7 +120,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions #if net45 #else - async public static Task ExecutePgCopyAsync(this IInsert that) where T : class + async public static Task ExecutePgCopyAsync(this IInsert that, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert; if (insert == null) throw new Exception("ExecutePgCopyAsync 是 FreeSql.Provider.PostgreSQL 特有的功能"); @@ -139,7 +140,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions using (var writer = conn.BeginBinaryImport(copyFromCommand.ToString())) { foreach (DataRow item in dt.Rows) - await writer.WriteRowAsync(System.Threading.CancellationToken.None, item.ItemArray); + await writer.WriteRowAsync(cancellationToken, item.ItemArray); writer.Complete(); } copyFromCommand.Clear(); @@ -165,7 +166,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions if (conn.State != System.Data.ConnectionState.Open) { isNotOpen = true; - await conn.OpenAsync(); + await conn.OpenAsync(cancellationToken); } try { diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs index 3c294f85..a3fe2972 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs @@ -3,6 +3,7 @@ using FreeSql.Internal.Model; using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Threading; #if microsoft using Microsoft.Data.SqlClient; #else @@ -146,7 +147,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions } #if net40 #else - async public static Task ExecuteSqlBulkCopyAsync(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class + async public static Task ExecuteSqlBulkCopyAsync(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert; if (insert == null) throw new Exception("ExecuteSqlBulkCopyAsync 是 FreeSql.Provider.SqlServer 特有的功能"); @@ -161,7 +162,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions bulkCopy.DestinationTableName = dt.TableName; for (int i = 0; i < dt.Columns.Count; i++) bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); - return bulkCopy.WriteToServerAsync(dt); + return bulkCopy.WriteToServerAsync(dt, cancellationToken); }; try @@ -194,7 +195,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions if (conn.State != System.Data.ConnectionState.Open) { isNotOpen = true; - await conn.OpenAsync(); + await conn.OpenAsync(cancellationToken); } try {