This commit is contained in:
sunkaixuan
2017-10-25 17:20:59 +08:00
parent f9a4522955
commit 4512821480
2 changed files with 47 additions and 15 deletions

View File

@@ -10,7 +10,7 @@ namespace SqlSugar
protected List<T> GetEntityList<T>(SqlSugarClient context, IDataReader dataReader, string fields) protected List<T> GetEntityList<T>(SqlSugarClient context, IDataReader dataReader, string fields)
{ {
Type type = typeof(T); 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<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () => IDataReaderEntityBuilder<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () =>
{ {
var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader).CreateBuilder(type); var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader).CreateBuilder(type);

View File

@@ -209,7 +209,8 @@ namespace SqlSugar
List<SugarParameter> paramters = new List<SugarParameter>(); List<SugarParameter> paramters = new List<SugarParameter>();
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder, joinExpression, ref paramters, ref shortName, types); queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder, joinExpression, ref paramters, ref shortName, types);
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
if (paramters != null) { if (paramters != null)
{
queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters); queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters);
} }
} }
@@ -232,7 +233,7 @@ namespace SqlSugar
expressionContext.MappingTables = this.Context.MappingTables; expressionContext.MappingTables = this.Context.MappingTables;
expressionContext.Resolve(joinExpression, ResolveExpressType.Join); expressionContext.Resolve(joinExpression, ResolveExpressType.Join);
int i = 0; int i = 0;
var joinArray = expressionContext.Result.GetResultArray(); var joinArray = MergeJoinArray(expressionContext.Result.GetResultArray());
parameters = expressionContext.Parameters; parameters = expressionContext.Parameters;
foreach (var entityType in entityTypeArray) foreach (var entityType in entityTypeArray)
{ {
@@ -265,6 +266,37 @@ namespace SqlSugar
expressionContext.Clear(); expressionContext.Clear();
return result; return result;
} }
private string[] MergeJoinArray(string[] joinArray)
{
List<string> result = new List<string>();
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<string, string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray) protected Dictionary<string, string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray)
{ {
Dictionary<string, string> result = new Dictionary<string, string>(); Dictionary<string, string> result = new Dictionary<string, string>();