From 2f3b6b09913867c628624bc3e481a4a17949108f Mon Sep 17 00:00:00 2001 From: "610262374@qq.com" <610262374@qq.com> Date: Fri, 3 Mar 2017 19:32:26 +0800 Subject: [PATCH] - --- .../ResolveItems/NewArrayExpessionResolve.cs | 2 +- SqlSugar/SqlSugarAccessory.cs | 39 ++++++++++++++----- SqlSugar/SqlSugarClient.cs | 2 +- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs index 247db036f..424023b0a 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs @@ -33,7 +33,7 @@ namespace SqlSugar base.Start(); if (parameter.CommonTempData is JoinType) { - base.Context.Result.Append(parameter.CommonTempData.ObjToString().ToUpper() + " JOIN ,{" + i + "}"); + base.Context.Result.Append(parameter.CommonTempData.ObjToString()+ ",{" + i + "}"); ++i; } } diff --git a/SqlSugar/SqlSugarAccessory.cs b/SqlSugar/SqlSugarAccessory.cs index beabe7ba6..bc2b190a4 100644 --- a/SqlSugar/SqlSugarAccessory.cs +++ b/SqlSugar/SqlSugarAccessory.cs @@ -101,24 +101,45 @@ namespace SqlSugar }); } - protected List GetJoinInfos(Expression joinExpression, SqlSugarClient context,params Type [] entityTypeArray) + protected List GetJoinInfos(Expression joinExpression, SqlSugarClient context, params Type[] entityTypeArray) { - List reval=new List(); - var lambdaParameters = ((LambdaExpression) joinExpression).Parameters; + List reval = new List(); + var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); ExpressionContext exp = new ExpressionContext(); exp.MappingColumns = context.MappingColumns; exp.MappingTables = context.MappingTables; exp.Resolve(joinExpression, ResolveExpressType.Join); + int i = 0; + var joinArray = exp.Result.GetResultArray(); foreach (var type in entityTypeArray) { - JoinQueryInfo joinInfo = new JoinQueryInfo() + var isFirst = i == 0; + ++i; + JoinQueryInfo joinInfo = new JoinQueryInfo(); + var hasMappingTable = exp.MappingTables.IsValuable(); + if (hasMappingTable) { - - - }; + var mappingInfo = exp.MappingTables.FirstOrDefault(it => it.EntityName.Equals(type.Name, StringComparison.CurrentCultureIgnoreCase)); + joinInfo.TableName = mappingInfo != null ? mappingInfo.DbTableName : type.Name; + } + else + { + joinInfo.TableName = type.Name; + } + if (isFirst) + { + var firstItem = lambdaParameters.First(); + joinInfo.PreShortName = firstItem.Name; + lambdaParameters.Remove(firstItem); + } + var joinString = joinArray[i * 2 - 2]; + joinInfo.ShortName = lambdaParameters[i-1].Name; + joinInfo.JoinType = (JoinType) Enum.Parse(typeof (JoinType), joinString); + joinInfo.JoinWhere = joinArray[i * 2]; + joinInfo.JoinIndex = i; + reval.Add((joinInfo)); } - var joinArray = exp.Result.GetResultArray(); - return null; + return reval; } } } diff --git a/SqlSugar/SqlSugarClient.cs b/SqlSugar/SqlSugarClient.cs index b221b738b..01f3fad8e 100644 --- a/SqlSugar/SqlSugarClient.cs +++ b/SqlSugar/SqlSugarClient.cs @@ -144,7 +144,7 @@ namespace SqlSugar public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { var queryable = Queryable(); - SqlBuilder.LambadaQueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression,this,typeof(T), typeof(T2)); + SqlBuilder.LambadaQueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression,this,typeof(T2)); return queryable; } public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new()