diff --git a/OrmTest/UnitTest/Query/SelectQuery.cs b/OrmTest/UnitTest/Query/SelectQuery.cs index 5d03ed0e5..ddfa59e2d 100644 --- a/OrmTest/UnitTest/Query/SelectQuery.cs +++ b/OrmTest/UnitTest/Query/SelectQuery.cs @@ -34,9 +34,11 @@ namespace OrmTest.UnitTest { Console.WriteLine(sql+" " + pars); }; - var list = db.Queryable() + var list = db.Queryable((st,st2)=>new object[] { + JoinType.Left,st.Id==st2.Id + }) .Where(st => st.Id > 0) - .Select(it => new ViewModelStudent { Name = it.Name }).ToList(); + .Select(st => new ViewModelStudent { School=st}).ToList(); var list2 = db.Queryable() .Where(st => st.Id > 0) diff --git a/SqlSugar/Abstract/SqlBuilderProvider/DMLBuilder/LambadaQueryBuilder.cs b/SqlSugar/Abstract/SqlBuilderProvider/DMLBuilder/LambadaQueryBuilder.cs index e71e113d6..b2f1623ae 100644 --- a/SqlSugar/Abstract/SqlBuilderProvider/DMLBuilder/LambadaQueryBuilder.cs +++ b/SqlSugar/Abstract/SqlBuilderProvider/DMLBuilder/LambadaQueryBuilder.cs @@ -87,6 +87,9 @@ namespace SqlSugar var expression = this.SelectValue as Expression; ILambdaExpressions resolveExpress = this.Context.LambdaExpressions; var isSingle= Builder.LambadaQueryBuilder.JoinQueryInfos.IsValuable(); + resolveExpress.JoinQueryInfos = Builder.LambadaQueryBuilder.JoinQueryInfos; + resolveExpress.MappingColumns = Context.MappingColumns; + resolveExpress.MappingTables = Context.MappingTables; resolveExpress.Resolve(expression, ResolveType); this.QueryPars.AddRange(resolveExpress.Parameters); var reval= resolveExpress.Result.GetResultString(); diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 1ef825449..96d8f2321 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -95,6 +95,10 @@ namespace SqlSugar { return new NewArrayExpessionResolve(parameter); } + else if (expression is ParameterExpression) + { + return new TypeParameterExpressionReolve(parameter); + } else if (expression != null && expression.NodeType.IsIn(ExpressionType.NewArrayBounds)) { Check.ThrowNotSupportedException("ExpressionType.NewArrayBounds"); diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index ad0f743b8..6bfcb5636 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -87,7 +87,9 @@ namespace SqlSugar } else if (item.Type.IsClass()) { - string prefix = Context.IsJoin ? memberName : ""; + base.Expression = item; + base.Start(); + var shortName = parameter.CommonTempData; var listProperties = item.Type.GetProperties().Cast().ToList(); foreach (var property in listProperties) { @@ -97,14 +99,15 @@ namespace SqlSugar } else { + var asName =memberName+"_"+property.Name; var columnName = property.Name; if (Context.IsJoin) { - base.Context.Result.Append(Context.GetAsString(property.Name, columnName,"")); + base.Context.Result.Append(Context.GetAsString(asName, columnName, shortName.ObjToString())); } else { - base.Context.Result.Append(Context.GetAsString(property.Name, columnName)); + base.Context.Result.Append(Context.GetAsString(asName, columnName)); } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/TypeParameterExpressionReolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/TypeParameterExpressionReolve.cs new file mode 100644 index 000000000..dc7ab3829 --- /dev/null +++ b/SqlSugar/ExpressionsToSql/ResolveItems/TypeParameterExpressionReolve.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class TypeParameterExpressionReolve : BaseResolve + { + public TypeParameterExpressionReolve(ExpressionParameter parameter) : base(parameter) + { + var expression = (ParameterExpression)base.Expression; + switch (parameter.Context.ResolveType) + { + case ResolveExpressType.WhereSingle: + break; + case ResolveExpressType.WhereMultiple: + break; + case ResolveExpressType.SelectSingle: + case ResolveExpressType.SelectMultiple: + parameter.BaseParameter.CommonTempData = expression.Name; + break; + case ResolveExpressType.FieldSingle: + break; + case ResolveExpressType.FieldMultiple: + break; + case ResolveExpressType.Join: + break; + default: + break; + } + } + } +} diff --git a/SqlSugar/Interface/ILambdaExpressions.cs b/SqlSugar/Interface/ILambdaExpressions.cs index ad5a40b7e..a5bd4737d 100644 --- a/SqlSugar/Interface/ILambdaExpressions.cs +++ b/SqlSugar/Interface/ILambdaExpressions.cs @@ -8,6 +8,9 @@ namespace SqlSugar { public partial interface ILambdaExpressions { + MappingColumnList MappingColumns { get; set; } + MappingTableList MappingTables { get; set; } + List JoinQueryInfos { get; set; } SqlSugarClient Context { get; set; } IDbMethods DbMehtods { get; set; } Expression Expression { get; set; } diff --git a/SqlSugar/SqlSugar.csproj b/SqlSugar/SqlSugar.csproj index c2c32c90a..1018e0db2 100644 --- a/SqlSugar/SqlSugar.csproj +++ b/SqlSugar/SqlSugar.csproj @@ -124,6 +124,7 @@ +