diff --git a/OrmTest/Program.cs b/OrmTest/Program.cs index 3ea48caff..0e4e4bbc9 100644 --- a/OrmTest/Program.cs +++ b/OrmTest/Program.cs @@ -17,11 +17,11 @@ namespace OrmTest { //Unit Test int eachCount = 10; - new Field(eachCount).Init(); - new Where(eachCount).Init(); - new Method(eachCount).Init(); - new JoinQuery(eachCount).Init(); - new SingleQuery(eachCount).Init(); + //new Field(eachCount).Init(); + //new Where(eachCount).Init(); + //new Method(eachCount).Init(); + //new JoinQuery(eachCount).Init(); + //new SingleQuery(eachCount).Init(); new SelectQuery(eachCount).Init(); } } diff --git a/OrmTest/UnitTest/Query/SelectQuery.cs b/OrmTest/UnitTest/Query/SelectQuery.cs index da9200a7b..71e82d880 100644 --- a/OrmTest/UnitTest/Query/SelectQuery.cs +++ b/OrmTest/UnitTest/Query/SelectQuery.cs @@ -30,30 +30,36 @@ namespace OrmTest.UnitTest using (var db = GetInstance()) { db.Database.IsEnableLogEvent = true; - db.Database.LogEventStarting = (sql,pars) => + db.Database.LogEventStarting = (sql, pars) => { - Console.WriteLine(sql+" " + pars); + Console.WriteLine(sql + " " + pars); }; - var list = db.Queryable((st,st2)=>new object[] { + + var listx = db.Queryable((st, st2) => new object[] { JoinType.Left,st.Id==st2.Id - }) - .Where((st,sc) => st.Id > 0) - .Select(st => new ViewModelStudent { School=st}).ToList(); + }) + .Where(st => st.Id > 0) + .Select((st, sc) => new { st, st.Id, stid = st.Id, scId = sc.Id }).ToList(); + return; + var list = db.Queryable((st, st2) => new object[] { + JoinType.Left,st.Id==st2.Id + }).Where((st, sc) => st.Id > 0) + .Select(st => new ViewModelStudent { School = st }).ToList(); var list2 = db.Queryable() .Where(st => st.Id > 0) .Select("id").ToList(); - var list3 = db.Queryable((st, sc,sc2) => new object[] { + var list3 = db.Queryable((st, sc, sc2) => new object[] { JoinType.Left,st.SchoolId==sc.Id, JoinType.Left,sc2.Id==sc.Id }).Where(st => st.Id > 0) - .Select((st) =>new School() { Id=st.Id}).ToList(); + .Select((st) => new School() { Id = st.Id }).ToList(); var list4 = db.Queryable("Student", "st") .AddJoinInfo("School", "sh", "sh.id=st.schoolid") .Where("st.id>@id") - .AddParameters(new {id=1}) + .AddParameters(new { id = 1 }) .Select("st.*").ToList(); } } diff --git a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index fb1968fbd..c0c56c378 100644 --- a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -214,33 +214,38 @@ namespace SqlSugar public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() { - throw new NotImplementedException(); + return SelectMehtod(expression); } public ISugarQueryable Select(Expression> expression) where TResult : class, new() + { + return SelectMehtod(expression); + } + + private ISugarQueryable SelectMehtod(Expression expression) where TResult : class, new() { var reval = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); reval.Context = this.Context; diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs index c6333955e..86d38d7c7 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -47,7 +48,7 @@ namespace SqlSugar base.Expression = item; base.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + i; - parameter.Context.Result.Append(base.Context.GetAsString(memberName,parameterName)); + parameter.Context.Result.Append(base.Context.GetAsString(memberName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } else if (item is MemberExpression) @@ -60,7 +61,7 @@ namespace SqlSugar base.Expression = item; base.Start(); parameter.IsAppendResult(); - base.Context.Result.Append(base.Context.GetAsString(memberName,parameter.CommonTempData.ObjToString())); + base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString())); base.Context.Result.CurrentParameter = null; } } @@ -81,9 +82,37 @@ namespace SqlSugar base.Context.Result.CurrentParameter = null; } } + else if (item.Type.IsClass()) + { + base.Expression = item; + base.Start(); + var shortName = parameter.CommonTempData; + var listProperties = item.Type.GetProperties().Cast().ToList(); + foreach (var property in listProperties) + { + if (property.PropertyType.IsClass()) + { + + } + else + { + var asName = memberName + "_" + property.Name; + var columnName = property.Name; + if (Context.IsJoin) + { + base.Context.Result.Append(Context.GetAsString(asName, columnName, shortName.ObjToString())); + } + else + { + base.Context.Result.Append(Context.GetAsString(asName, columnName)); + } + } + } + } else { Check.ThrowNotSupportedException(item.GetType().Name); + } } }