Synchronization code

This commit is contained in:
sunkaixuan
2022-11-08 13:40:57 +08:00
parent fa22af532d
commit 57e6acd1f4
6 changed files with 51 additions and 1 deletions

View File

@@ -928,6 +928,7 @@ namespace SqlSugar
result.SqlBuilder.QueryBuilder.Parameters = QueryBuilder.Parameters;
result.SqlBuilder.QueryBuilder.SelectValue = expression;
result.SqlBuilder.QueryBuilder.IsSelectSingleFiledJson = UtilMethods.IsJsonMember(expression, this.Context);
result.SqlBuilder.QueryBuilder.IsSelectSingleFiledArray = UtilMethods.IsArrayMember(expression, this.Context);
if (this.IsCache)
{
result.WithCache(this.CacheTime);
@@ -1192,6 +1193,10 @@ namespace SqlSugar
{
result = this.Context.Utilities.DataReaderToSelectJsonList<TResult>(dataReader);
}
else if (QueryBuilder.IsSelectSingleFiledArray)
{
result = this.Context.Utilities.DataReaderToSelectArrayList<TResult>(dataReader);
}
else if (entityType.IsAnonymousType() || isComplexModel)
{
result = this.Context.Utilities.DataReaderToList<TResult>(dataReader);

View File

@@ -36,6 +36,7 @@ namespace SqlSugar
public bool IsCrossQueryWithAttr { get; set; }
public Dictionary<string,string> CrossQueryItems { get; set; }
public bool IsSelectSingleFiledJson { get; set; }
public bool IsSelectSingleFiledArray { get; set; }
public string TranLock { get; set; }
public bool IsDisableMasterSlaveSeparation { get; set; }
public bool IsEnableMasterSlaveSeparation { get; set; }

View File

@@ -358,6 +358,11 @@ namespace SqlSugar
result = true;
break;
}
else if (memberExpr.Expression is BinaryExpression&&(memberExpr.Expression as BinaryExpression).NodeType==ExpressionType.ArrayIndex)
{
result = true;
break;
}
memberExpr = memberExpr.Expression as MemberExpression;
}
return result;

View File

@@ -226,6 +226,27 @@ namespace SqlSugar
return result;
}
public List<T> DataReaderToSelectArrayList<T>(IDataReader dataReader)
{
List<T> result = new List<T>();
using (dataReader)
{
while (dataReader.Read())
{
var value = dataReader.GetValue(0);
if (value == null || value == DBNull.Value)
{
result.Add(default(T));
}
else
{
result.Add((T)value);
}
}
}
return result;
}
/// <summary>
/// DataReaderToList
/// </summary>

View File

@@ -18,6 +18,7 @@ namespace SqlSugar
Task<List<ExpandoObject>> DataReaderToExpandoObjectListAsyncNoUsing(IDataReader dataReader);
List<T> DataReaderToList<T>(IDataReader reader);
List<T> DataReaderToSelectJsonList<T>(IDataReader reader);
List<T> DataReaderToSelectArrayList<T>(IDataReader reader);
Task<List<T>> DataReaderToSelectJsonListAsync<T>(IDataReader reader);
List<T> DataReaderToListNoUsing<T>(IDataReader reader);
Task<List<T>> DataReaderToListAsync<T>(IDataReader dataReader);

View File

@@ -28,7 +28,24 @@ namespace SqlSugar
return string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower();
}
}
internal static bool IsArrayMember(Expression expression, SqlSugarProvider context)
{
if (expression == null)
return false;
if (!(expression is LambdaExpression))
return false;
var lambda = (LambdaExpression)expression;
if (!(lambda.Body is MemberExpression))
return false;
var member = lambda.Body as MemberExpression;
if (!(member.Type.IsClass()))
return false;
if (member.Expression == null)
return false;
var entity = context.EntityMaintenance.GetEntityInfo(member.Expression.Type);
var json = entity.Columns.FirstOrDefault(z => z.IsArray && z.PropertyName == member.Member.Name);
return json != null;
}
internal static bool IsJsonMember(Expression expression, SqlSugarProvider context)
{
if (expression == null)