diff --git a/Src/Asp.Net/SqlServerTest/Demos/D_QueryableView.cs b/Src/Asp.Net/SqlServerTest/Demos/D_QueryableView.cs new file mode 100644 index 000000000..7ed361170 --- /dev/null +++ b/Src/Asp.Net/SqlServerTest/Demos/D_QueryableView.cs @@ -0,0 +1,31 @@ +using OrmTest.Models; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OrmTest.Demo +{ + public class D_QueryableViewn : DemoBase + { + public static void Init() + { + var db = GetInstance(); + var q1 = db.Queryable((st,sc)=>new object[] { + JoinType.Left,st.SchoolId==sc.Id + }).Select((st, sc) => new ViewModelStudent4() { Id=st.Id, Name=st.Name,SchoolName=sc.Name }); + + var q2 = db.Queryable(); + + + var q3 = db.Queryable(q1, q2, (j1, j2) => j1.Id == j2.Id).Select((j1, j2) => j1).ToList(); + } + } + + public class ViewModelStudent4 { + public int Id { get; set; } + public string SchoolName { get; set; } + public string Name { get; set; } + } +} diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs index c7545da81..5061a4745 100644 --- a/Src/Asp.Net/SqlServerTest/Program.cs +++ b/Src/Asp.Net/SqlServerTest/Program.cs @@ -49,6 +49,7 @@ namespace OrmTest OrmTest.Demo.MasterSlave.Init(); OrmTest.Demo.SharedConnection.Init(); OrmTest.Demo.ExtSqlFun.Init(); + OrmTest.Demo.D_QueryableViewn.Init(); } } } diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj index f6c44945b..f6b628a58 100644 --- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj +++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj @@ -62,6 +62,7 @@ + diff --git a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs index c6510b36f..dcca04e74 100644 --- a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs +++ b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("4.6.0.8")] -[assembly: AssemblyFileVersion("4.6.0.8")] +[assembly: AssemblyVersion("4.6.0.9")] +[assembly: AssemblyFileVersion("4.6.0.9")] diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index 9c3699355..ef8a8f44b 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -311,37 +311,45 @@ namespace SqlSugar return queryable; } public virtual ISugarQueryable Queryable( - ISugarQueryable joinQueryable1, ISugarQueryable joinQueryable2, Expression> joinExpression) where T : class, new() + ISugarQueryable joinQueryable1, ISugarQueryable joinQueryable2, Expression> joinExpression) where T : class, new() where T2 : class, new() { return Queryable(joinQueryable1, joinQueryable2, JoinType.Inner, joinExpression); } public virtual ISugarQueryable Queryable( - ISugarQueryable joinQueryable1, ISugarQueryable joinQueryable2, JoinType joinType, Expression> joinExpression) where T : class, new() + ISugarQueryable joinQueryable1, ISugarQueryable joinQueryable2, JoinType joinType, Expression> joinExpression) where T : class, new() where T2 : class, new() { - throw new Exception("Still in the process of development"); - } - public virtual ISugarQueryable Queryable( - ISugarQueryable joinQueryableMaster, ISugarQueryable joinQueryable1, JoinType joinType, Expression> joinExpression1, - ISugarQueryable joinQueryable2, JoinType joinType2, Expression> joinExpression2) where T : class, new() - { - throw new Exception("Still in the process of development"); - } + var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig); + sqlBuilder.Context = base.Context; + InitMppingInfo(); + var types = new Type[] { typeof(T2) }; + var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); + queryable.Context = base.Context; + queryable.SqlBuilder = sqlBuilder; + queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig); + queryable.QueryBuilder.JoinQueryInfos = new List(); + queryable.QueryBuilder.Builder = sqlBuilder; + queryable.QueryBuilder.Context = base.Context; + queryable.QueryBuilder.EntityType = typeof(T); + queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig); - public virtual ISugarQueryable Queryable( - ISugarQueryable joinQueryableMaster, ISugarQueryable joinQueryable1, JoinType joinType, Expression> joinExpression1, - ISugarQueryable joinQueryable2, JoinType joinType2, Expression> joinExpression2, - ISugarQueryable joinQueryable3, JoinType joinType3, Expression> joinExpression3) where T : class, new() - { - throw new Exception("Still in the process of development"); - } + //master + var shortName1 = joinExpression.Parameters[0].Name; + var sqlObj1 = joinQueryable1.ToSql(); + string sql1 = sqlObj1.Key; + UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0); + queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1); ; + queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value); - public virtual ISugarQueryable Queryable( - ISugarQueryable joinQueryableMaster, ISugarQueryable joinQueryable1, JoinType joinType, Expression> joinExpression1, - ISugarQueryable joinQueryable2, JoinType joinType2, Expression> joinExpression2, - ISugarQueryable joinQueryable3, JoinType joinType3, Expression> joinExpression3, - ISugarQueryable joinQueryable4, JoinType joinType4, Expression> joinExpression4) where T : class, new() - { - throw new Exception("Still in the process of development"); + //join table 1 + var shortName2 = joinExpression.Parameters[1].Name; + var sqlObj2 = joinQueryable2.ToSql(); + string sql2 = sqlObj2.Key; + UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1); + queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value); + var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple); + queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2,shortName2)}); + + return queryable; } #endregion diff --git a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite index 107104fb6..6a4bceadc 100644 Binary files a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite and b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite differ