diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs index b415c3d03..34f896e36 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 000000000..a7fcec8f8 --- /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 24a0a9a92..0b1bb45ff 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 1e3aa5fd5..c5d6a83ca 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 54762344d..c4edcfd28 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 177fc8632..0f3c7d7fa 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 d9eaaca23..811dc2039 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 7e359c40c..c6fad4f6a 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 feb4849f8..53cb1950f 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 1b57b2731..7949ff3b1 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 7502091bc..fe33ff887 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 fc17cb645..b28ab64ba 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 694b35059..bab8b26f0 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 ed696e72d..c70e04e45 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 e27c5859d..b38ab3b48 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 83d123c79..febb1120b 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 b4c208253..ee41d1719 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 ca0880afc..0eb05c0a5 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 cb17d03d2..dbd367843 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 3613cf423..59a549dd8 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 980775705..c9e0e0166 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 88c63d3f0..2d3d691e7 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 c027caf6d..6df2c42e5 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 61ee7e0b2..f4bb94fe4 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 f439e26d0..438470e72 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 3c65f7b7e..6441c35ea 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 5d214f83b..b6ee8e7b7 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 b2d451fbf..044622e02 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 0e29039c0..1a15b9c18 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 bbeb94ac3..fc16cb9ce 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 3927f2af4..9a134de83 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 2ec778983..98b3b85a1 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 93c5f3950..da95085d8 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 f7afb40d8..ed3da6fca 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) {