diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs index b415c3d0..34f896e3 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs @@ -380,7 +380,7 @@ WHERE ROWNUM < 11"; var xxxhzytuple = g.sqlserver.Select() - .Where(a => a.Item1.Code == "xxx" && a.Item2.OptionsEntity03 == true) + .Where(a => a.t1.Code == "xxx" && a.t2.OptionsEntity03 == true) .ToSql(); diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs new file mode 100644 index 00000000..a7fcec8f --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest4.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Threading; +using Xunit; +using static FreeSql.Tests.UnitTest1; + +namespace FreeSql.Tests +{ + public class UnitTest4 + { + static Lazy sqliteLazy = new Lazy(() => new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;") + //.UseConnectionFactory(FreeSql.DataType.Sqlite, () => + //{ + // var conn = new System.Data.SQLite.SQLiteConnection(@"Data Source=|DataDirectory|\document.db;Pooling=true;"); + // //conn.Open(); + // //var cmd = conn.CreateCommand(); + // //cmd.CommandText = $"attach database [xxxtb.db] as [xxxtb];\r\n"; + // //cmd.ExecuteNonQuery(); + // //cmd.Dispose(); + // return conn; + //}) + .UseAutoSyncStructure(true) + //.UseGenerateCommandParameterWithLambda(true) + .UseLazyLoading(true) + .UseMonitorCommand( + cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前 + //, (cmd, traceLog) => Console.WriteLine(traceLog) + ) + .Build()); + public static IFreeSql sqlite => sqliteLazy.Value; + + + [Fact] + public void TestHzyTuple() + { + var xxxhzytuple = g.sqlite.Select() + .LeftJoin(w => w.t1.Id2 == w.t2.TemplatesId) + .Where(w => w.t1.Code == "xxx" && w.t2.OptionsEntity03 == true) + .OrderBy(w => w.t1.AddTime) + .ToSql(); + + } + + + + } +} diff --git a/FreeSql/Interface/Curd/ISelect/ISelect10.cs b/FreeSql/Interface/Curd/ISelect/ISelect10.cs index 24a0a9a9..0b1bb45f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect10.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect10.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,42 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index 1e3aa5fd..c5d6a83c 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect11.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect11.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,42 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index 54762344..c4edcfd2 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect12.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect12.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,42 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index 177fc863..0f3c7d7f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect13.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect13.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,43 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index d9eaaca2..811dc203 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect14.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect14.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,42 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index 7e359c40..c6fad4f6 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect15.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect15.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,42 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index feb4849f..53cb1950 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect16.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect16.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -59,8 +78,41 @@ namespace FreeSql ISelect OrderBy(Expression> column); ISelect OrderByDescending(Expression> column); - ISelect OrderByIf(bool condition, Expression < Func> column, bool descending = false); + 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 index 1b57b273..7949ff3b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect2.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect2.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; namespace FreeSql { + public interface ISelect : ISelect0, T1> where T2 : class { @@ -27,12 +28,30 @@ namespace FreeSql 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(Expression> select); List ToList(); void ToChunk(Expression> select, int size, Action>> done); @@ -54,7 +73,6 @@ namespace FreeSql ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); - ISelect Where(Expression, bool>> exp); ISelectGrouping> GroupBy(Expression> exp); @@ -63,5 +81,41 @@ namespace FreeSql 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/ISelect3.cs b/FreeSql/Interface/Curd/ISelect/ISelect3.cs index 7502091b..fe33ff88 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect3.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect3.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; namespace FreeSql { + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class { @@ -27,6 +29,24 @@ namespace FreeSql 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); @@ -62,5 +82,40 @@ namespace FreeSql 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 index fc17cb64..b28ab64b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect4.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect4.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; namespace FreeSql { + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class { @@ -27,6 +29,24 @@ namespace FreeSql 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); @@ -62,5 +82,39 @@ namespace FreeSql 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 index 694b3505..bab8b26f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect5.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect5.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; namespace FreeSql { + + public interface ISelect : ISelect0, T1> where T2 : class where T3 : class where T4 : class where T5 : class { @@ -27,6 +29,24 @@ namespace FreeSql 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); @@ -62,5 +82,41 @@ namespace FreeSql 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 index ed696e72..c70e04e4 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect6.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect6.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -62,5 +81,39 @@ namespace FreeSql 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 index e27c5859..b38ab3b4 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect7.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect7.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -62,5 +81,40 @@ namespace FreeSql 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 index 83d123c7..febb1120 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect8.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect8.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -62,5 +81,40 @@ namespace FreeSql 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 index b4c20825..ee41d171 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect9.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect9.cs @@ -7,6 +7,7 @@ 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 { @@ -27,6 +28,24 @@ namespace FreeSql 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); @@ -62,5 +81,39 @@ namespace FreeSql 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/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index ca0880af..0eb05c0a 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1689,14 +1689,14 @@ namespace FreeSql.Internal { var parent = node.Expression as MemberExpression; if (parent.Expression?.NodeType == ExpressionType.Parameter && - parent.Expression.Type.Name.StartsWith("NativeTuple`") == true && - int.TryParse(parent.Member.Name.Replace("Item", ""), out widx) && widx > 0 && widx <= tables.Count) + parent.Expression.Type.Name.StartsWith("HzyTuple`") == true && + int.TryParse(parent.Member.Name.Replace("t", ""), out widx) && widx > 0 && widx <= tables.Count) return Expression.Property(parameters[widx - 1], node.Member.Name); } if (node.Expression?.NodeType == ExpressionType.Parameter && - node.Expression.Type.Name.StartsWith("NativeTuple`") == true && - int.TryParse(node.Member.Name.Replace("Item", ""), out widx) && widx > 0 && widx <= tables.Count) + node.Expression.Type.Name.StartsWith("HzyTuple`") == true && + int.TryParse(node.Member.Name.Replace("t", ""), out widx) && widx > 0 && widx <= tables.Count) return parameters[widx - 1]; return base.VisitMember(node); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs index cb17d03d..dbd36784 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs @@ -10,15 +10,7 @@ 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 + 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) @@ -33,31 +25,32 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -129,22 +122,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -203,9 +189,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -222,6 +208,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -295,6 +410,69 @@ namespace FreeSql.Internal.CommonProvider 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 index 3613cf42..59a549dd 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select11Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select11Provider.cs @@ -10,16 +10,7 @@ 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 + 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) @@ -35,32 +26,33 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -132,23 +124,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -207,9 +191,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -226,6 +210,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -299,6 +412,69 @@ namespace FreeSql.Internal.CommonProvider 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 index 98077570..c9e0e016 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select12Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select12Provider.cs @@ -9,18 +9,9 @@ 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 + 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) @@ -37,33 +28,34 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; - if (type == _tables[11].Table?.Type) return $"( {sqlT12} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -135,24 +127,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -211,9 +194,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -230,6 +213,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -303,6 +415,69 @@ namespace FreeSql.Internal.CommonProvider 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 index 88c63d3f..2d3d691e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select13Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select13Provider.cs @@ -10,18 +10,7 @@ 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 + 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) @@ -39,34 +28,35 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; - if (type == _tables[11].Table?.Type) return $"( {sqlT12} )"; - if (type == _tables[12].Table?.Type) return $"( {sqlT13} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -138,25 +128,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -215,9 +195,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -234,6 +214,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -307,6 +416,68 @@ namespace FreeSql.Internal.CommonProvider 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 index c027caf6..6df2c42e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select14Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select14Provider.cs @@ -10,19 +10,7 @@ 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 + 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) @@ -41,35 +29,36 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; - if (type == _tables[11].Table?.Type) return $"( {sqlT12} )"; - if (type == _tables[12].Table?.Type) return $"( {sqlT13} )"; - if (type == _tables[13].Table?.Type) return $"( {sqlT14} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -141,26 +130,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -219,9 +197,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -238,6 +216,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -311,6 +418,68 @@ namespace FreeSql.Internal.CommonProvider 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 index 61ee7e0b..f4bb94fe 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select15Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select15Provider.cs @@ -10,20 +10,7 @@ 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 + 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) @@ -43,36 +30,37 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; - if (type == _tables[11].Table?.Type) return $"( {sqlT12} )"; - if (type == _tables[12].Table?.Type) return $"( {sqlT13} )"; - if (type == _tables[13].Table?.Type) return $"( {sqlT14} )"; - if (type == _tables[14].Table?.Type) return $"( {sqlT15} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -144,27 +132,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -223,9 +199,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -242,6 +218,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -315,6 +420,69 @@ namespace FreeSql.Internal.CommonProvider 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 index f439e26d..438470e7 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select16Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select16Provider.cs @@ -10,21 +10,7 @@ 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 + 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) @@ -45,37 +31,38 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; - if (type == _tables[9].Table?.Type) return $"( {sqlT10} )"; - if (type == _tables[10].Table?.Type) return $"( {sqlT11} )"; - if (type == _tables[11].Table?.Type) return $"( {sqlT12} )"; - if (type == _tables[12].Table?.Type) return $"( {sqlT13} )"; - if (type == _tables[13].Table?.Type) return $"( {sqlT14} )"; - if (type == _tables[14].Table?.Type) return $"( {sqlT15} )"; - if (type == _tables[15].Table?.Type) return $"( {sqlT16} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -147,28 +134,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -227,9 +201,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -246,6 +220,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -319,6 +422,68 @@ namespace FreeSql.Internal.CommonProvider 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/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs index 3c65f7b7..6441c35e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs @@ -9,6 +9,8 @@ using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider { + + public abstract class Select2Provider : Select0Provider, T1>, ISelect where T2 : class { @@ -17,17 +19,18 @@ namespace FreeSql.Internal.CommonProvider { 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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};", parms)); return this; } @@ -111,8 +114,7 @@ namespace FreeSql.Internal.CommonProvider { return Expression.Lambda>( typeof(TDto).InternalNewExpression(), - _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), - Expression.Parameter(typeof(T2), "b")); + _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"), Expression.Parameter(typeof(T2), "b")); } public void ToChunk(Expression> select, int size, Action>> done) @@ -178,14 +180,6 @@ namespace FreeSql.Internal.CommonProvider return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } - ISelect ISelect.Where(Expression, bool>> exp) - { - if (exp == null) return this.Where(null); - var exp2 = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(exp, _tables); - for (var a = 0; a < exp2.Parameters.Count; a++) _tables[a].Parameter = exp2.Parameters[a]; - return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp2, null, _whereGlobalFilter, _params)); - } - bool ISelect.Any(Expression> exp) { if (exp == null) return this.Any(); @@ -200,6 +194,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -273,6 +396,73 @@ namespace FreeSql.Internal.CommonProvider 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 index 5d214f83..b6ee8e7b 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs @@ -9,9 +9,10 @@ using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider { + + public abstract class Select3Provider : Select0Provider, T1>, ISelect - where T2 : class - where T3 : class + where T2 : class where T3 : class { public Select3Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) @@ -19,18 +20,19 @@ namespace FreeSql.Internal.CommonProvider 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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};", parms)); return this; } @@ -108,15 +110,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -194,6 +196,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -267,6 +398,69 @@ namespace FreeSql.Internal.CommonProvider 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 index b2d451fb..044622e0 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs @@ -9,10 +9,9 @@ using System.Threading.Tasks; namespace FreeSql.Internal.CommonProvider { + public abstract class Select4Provider : Select0Provider, T1>, ISelect - where T2 : class - where T3 : class - where T4 : class + where T2 : class where T3 : class where T4 : class { public Select4Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) @@ -21,19 +20,20 @@ namespace FreeSql.Internal.CommonProvider _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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};\r\n{sqlT4};", parms)); return this; } @@ -111,16 +111,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -198,6 +197,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -271,6 +399,69 @@ namespace FreeSql.Internal.CommonProvider 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 index 0e29039c..1a15b9c1 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs @@ -10,10 +10,7 @@ namespace FreeSql.Internal.CommonProvider { public abstract class Select5Provider : Select0Provider, T1>, ISelect - where T2 : class - where T3 : class - where T4 : class - where T5 : class + 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) @@ -23,20 +20,21 @@ namespace FreeSql.Internal.CommonProvider _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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};", parms)); return this; } @@ -114,17 +112,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -202,6 +198,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -275,6 +400,70 @@ namespace FreeSql.Internal.CommonProvider 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 index bbeb94ac..fc16cb9c 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs @@ -10,11 +10,7 @@ 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 + 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) @@ -25,21 +21,22 @@ namespace FreeSql.Internal.CommonProvider _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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};", parms)); return this; } @@ -117,18 +114,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -206,6 +200,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -279,6 +402,68 @@ namespace FreeSql.Internal.CommonProvider 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 index 3927f2af..9a134de8 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs @@ -10,12 +10,7 @@ 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 + 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) @@ -27,22 +22,23 @@ namespace FreeSql.Internal.CommonProvider _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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};", parms)); return this; } @@ -120,19 +116,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -210,6 +202,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -246,7 +367,7 @@ namespace FreeSql.Internal.CommonProvider 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); @@ -254,7 +375,7 @@ namespace FreeSql.Internal.CommonProvider 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); @@ -283,6 +404,71 @@ namespace FreeSql.Internal.CommonProvider 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 index 2ec77898..98b3b85a 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs @@ -9,14 +9,9 @@ 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 + 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) @@ -29,23 +24,24 @@ namespace FreeSql.Internal.CommonProvider _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} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{sqlT2};\r\n{sqlT3};\r\n{sqlT4};\r\n{sqlT5};\r\n{sqlT6};\r\n{sqlT7};\r\n{sqlT8};", parms)); return this; } @@ -123,20 +119,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -214,6 +205,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -287,6 +407,69 @@ namespace FreeSql.Internal.CommonProvider 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 index 93c5f395..da95085d 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs @@ -10,14 +10,7 @@ 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 + 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) @@ -31,30 +24,31 @@ namespace FreeSql.Internal.CommonProvider _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) return $"( {sqlT1} )"; - if (type == _tables[1].Table?.Type) return $"( {sqlT2} )"; - if (type == _tables[2].Table?.Type) return $"( {sqlT3} )"; - if (type == _tables[3].Table?.Type) return $"( {sqlT4} )"; - if (type == _tables[4].Table?.Type) return $"( {sqlT5} )"; - if (type == _tables[5].Table?.Type) return $"( {sqlT6} )"; - if (type == _tables[6].Table?.Type) return $"( {sqlT7} )"; - if (type == _tables[7].Table?.Type) return $"( {sqlT8} )"; - if (type == _tables[8].Table?.Type) return $"( {sqlT9} )"; + 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)); + if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject($"{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 0; + 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); } @@ -126,21 +120,15 @@ namespace FreeSql.Internal.CommonProvider 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")); + _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; @@ -199,9 +187,9 @@ namespace FreeSql.Internal.CommonProvider ISelect ISelect.WhereIf(bool condition, Expression> exp) { - if (condition == false || exp == null) return this.Where(null); + if (condition == false || exp == null) return this; for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; - return condition ? this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)) : this; + return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereGlobalFilter, _params)); } bool ISelect.Any(Expression> exp) @@ -218,6 +206,135 @@ namespace FreeSql.Internal.CommonProvider 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) @@ -291,6 +408,68 @@ namespace FreeSql.Internal.CommonProvider 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/Model/HzyTuple.cs b/FreeSql/Internal/Model/HzyTuple.cs index f7afb40d..ed3da6fc 100644 --- a/FreeSql/Internal/Model/HzyTuple.cs +++ b/FreeSql/Internal/Model/HzyTuple.cs @@ -1,91 +1,6 @@ -namespace HzySql.Models +namespace FreeSql.Internal.Model { - using HzySql.Interface; - - public class HzyTuple - { - /// - /// 在 拉姆达表达式 where 表达式中使用 w => w.In(w.t1.Member_ID, guidsArray) - /// - /// - /// - /// - /// - public bool In(T field, params T2[] array) => true; - - /// - /// 子查询 只能在 Where 中使用 - /// - /// - /// - /// - /// - public bool In(T field, T2 iCurdBase) where T2 : ISqlContext => true; - - /// - /// 在 拉姆达表达式 where 表达式中使用 w => w.NotIn(w.t1.Member_ID, guidsArray) - /// - /// - /// - /// - /// - public bool NotIn(T field, params T2[] array) => true; - - /// - /// 子查询 只能在 Where 中使用 - /// - /// - /// - /// - /// - public bool NotIn(T field, T2 iCurdBase) where T2 : ISqlContext => true; - - /// - /// like %123% 只能在 Where 中使用 - /// - /// - /// - /// - public bool Like(T field, T2 value) => true; - - /// - /// like 123% 只能在 Where 中使用 - /// - /// - /// - /// - public bool LikeStart(T field, T2 value) => true; - - /// - /// like %123 只能在 Where 中使用 - /// - /// - /// - /// - public bool LikeEnd(T field, T2 value) => true; - - /// - /// 一般在Where 条件中使用 例如 : w.HzySql("convert(varchar(50),UserName,23) > convert(varchar(50),GetDate(),23)") - /// 一般用来支持这种语法》CONVERT(varchar(100), GETDATE(), 23) -- 2006-05-16 - /// - /// - /// - /// - /// - public bool HzySql(string value) => true; - - /// - /// 一般在Where 条件中使用 例如 : w.HzySql("convert(varchar(50),UserName,23)") > DateTime.Now.ToString("yyyy-MM-dd") - /// 一般用来支持这种语法》CONVERT(varchar(100), GETDATE(), 23) -- 2006-05-16 - /// - /// - /// - /// - /// - public TR HzySql(string value) => default(TR); - } - - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T t) { @@ -96,7 +11,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2) { @@ -108,7 +23,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3) { @@ -121,7 +36,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4) { @@ -135,7 +50,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) { @@ -150,7 +65,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) { @@ -166,7 +81,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) { @@ -183,7 +98,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) { @@ -201,7 +116,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) { @@ -220,7 +135,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10) { @@ -240,7 +155,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11) { @@ -261,7 +176,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12) { @@ -283,7 +198,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13) { @@ -306,7 +221,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13, T14 t14) { @@ -330,7 +245,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13, T14 t14, T15 t15) { @@ -355,7 +270,7 @@ } - public class HzyTuple : HzyTuple + public class HzyTuple { public HzyTuple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16) {