diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index 97bb9bce8..d5a1a1462 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -10,7 +10,7 @@ namespace SqlSugar protected List GetEntityList(SqlSugarClient context, IDataReader dataReader, string fields) { Type type = typeof(T); - string key = "DataReaderToList." + fields + context.CurrentConnectionConfig.DbType + type.FullName; + string key = "DataReaderToList." + fields+ dataReader.FieldCount+ context.CurrentConnectionConfig.DbType + type.FullName; IDataReaderEntityBuilder entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () => { var cacheResult = new IDataReaderEntityBuilder(context, dataReader).CreateBuilder(type); diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/SqlSugarAccessory.cs b/Src/Asp.Net/SqlSugar/Infrastructure/SqlSugarAccessory.cs index 65569dd1a..75e71265c 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/SqlSugarAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/SqlSugarAccessory.cs @@ -74,19 +74,19 @@ namespace SqlSugar InitMppingInfo(); InitMppingInfo(); } - protected void InitMppingInfo() + protected void InitMppingInfo() { - InitMppingInfo(); + InitMppingInfo(); InitMppingInfo(); } - protected void InitMppingInfo() + protected void InitMppingInfo() { - InitMppingInfo(); + InitMppingInfo(); InitMppingInfo(); } - protected void InitMppingInfo() + protected void InitMppingInfo() { - InitMppingInfo(); + InitMppingInfo(); InitMppingInfo(); } #endregion @@ -206,10 +206,11 @@ namespace SqlSugar { this.CreateQueryable(queryable); string shortName = string.Empty; - List paramters =new List(); - queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder,joinExpression, ref paramters, ref shortName, types); + List paramters = new List(); + queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder, joinExpression, ref paramters, ref shortName, types); queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; - if (paramters != null) { + if (paramters != null) + { queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters); } } @@ -217,13 +218,13 @@ namespace SqlSugar { this.CreateQueryable(queryable); string shortName = string.Empty; - queryable.SqlBuilder.QueryBuilder.EasyJoinInfos = this.GetEasyJoinInfo(joinExpression, ref shortName,queryable.SqlBuilder,types); + queryable.SqlBuilder.QueryBuilder.EasyJoinInfos = this.GetEasyJoinInfo(joinExpression, ref shortName, queryable.SqlBuilder, types); queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; } #endregion #region Private methods - protected List GetJoinInfos(ISqlBuilder sqlBuilder,Expression joinExpression,ref List parameters, ref string shortName, params Type[] entityTypeArray) + protected List GetJoinInfos(ISqlBuilder sqlBuilder, Expression joinExpression, ref List parameters, ref string shortName, params Type[] entityTypeArray) { List result = new List(); var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); @@ -232,7 +233,7 @@ namespace SqlSugar expressionContext.MappingTables = this.Context.MappingTables; expressionContext.Resolve(joinExpression, ResolveExpressType.Join); int i = 0; - var joinArray = expressionContext.Result.GetResultArray(); + var joinArray = MergeJoinArray(expressionContext.Result.GetResultArray()); parameters = expressionContext.Parameters; foreach (var entityType in entityTypeArray) { @@ -265,7 +266,38 @@ namespace SqlSugar expressionContext.Clear(); return result; } - protected Dictionary GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray) + + private string[] MergeJoinArray(string[] joinArray) + { + List result = new List(); + string joinValue = null; + int i = 0; + foreach (var item in joinArray) + { + ++i; + var isLast = joinArray.Length == i; + var isJoinType = item.IsIn(JoinType.Inner.ToString(), JoinType.Left.ToString(), JoinType.Right.ToString()); + if (isJoinType) + { + if (joinValue != null) + result.Add(joinValue); + joinValue = null; + result.Add(item); + } + else + { + isJoinType = false; + joinValue += joinValue==null?item:(","+item); + } + if (isLast) + { + result.Add(joinValue); + } + } + return result.ToArray(); ; + } + + protected Dictionary GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray) { Dictionary result = new Dictionary(); var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); @@ -273,7 +305,7 @@ namespace SqlSugar var index = 1; foreach (var item in entityTypeArray) { - result.Add(UtilConstants.Space +lambdaParameters[index].Name, item.Name); + result.Add(UtilConstants.Space + lambdaParameters[index].Name, item.Name); ++index; } return result;