mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-06-27 19:41:17 +08:00
Optimize the code
This commit is contained in:
parent
5fb63604cf
commit
85b95ef153
@ -203,7 +203,7 @@ namespace SqlSugar
|
||||
{
|
||||
using (dataReader)
|
||||
{
|
||||
if (type.Name.StartsWith("KeyValuePair"))
|
||||
if (UtilMethods.IsKeyValuePairType(type))
|
||||
{
|
||||
return GetKeyValueList<T>(type, dataReader);
|
||||
}
|
||||
@ -231,7 +231,7 @@ namespace SqlSugar
|
||||
{
|
||||
using (dataReader)
|
||||
{
|
||||
if (type.Name.StartsWith("KeyValuePair"))
|
||||
if (UtilMethods.IsKeyValuePairType(type))
|
||||
{
|
||||
return await GetKeyValueListAsync<T>(type, dataReader);
|
||||
}
|
||||
@ -256,7 +256,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual List<T> DataReaderToListNoUsing<T>(Type type, IDataReader dataReader)
|
||||
{
|
||||
if (type.Name.StartsWith("KeyValuePair"))
|
||||
if (UtilMethods.IsKeyValuePairType(type))
|
||||
{
|
||||
return GetKeyValueList<T>(type, dataReader);
|
||||
}
|
||||
@ -275,7 +275,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual Task<List<T>> DataReaderToListNoUsingAsync<T>(Type type, IDataReader dataReader)
|
||||
{
|
||||
if (type.Name.StartsWith("KeyValuePair"))
|
||||
if (UtilMethods.IsKeyValuePairType(type))
|
||||
{
|
||||
return GetKeyValueListAsync<T>(type, dataReader);
|
||||
}
|
||||
|
@ -214,6 +214,15 @@ namespace SqlSugar
|
||||
generator.Emit(OpCodes.Ldloc, result);
|
||||
generator.Emit(OpCodes.Ldarg_0);
|
||||
generator.Emit(OpCodes.Ldc_I4, i);
|
||||
var insertBuilder = InstanceFactory.GetInsertBuilder(this.Context?.CurrentConnectionConfig);
|
||||
if (insertBuilder?.DeserializeObjectFunc != null)
|
||||
{
|
||||
if (IDataRecordExtensions.DeserializeObjectFunc == null)
|
||||
{
|
||||
IDataRecordExtensions.DeserializeObjectFunc = insertBuilder.DeserializeObjectFunc;
|
||||
}
|
||||
jsonMethod =typeof(IDataRecordExtensions).GetMethod("GetDeserializeObject").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
|
||||
}
|
||||
generator.Emit(OpCodes.Call, jsonMethod);
|
||||
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true));
|
||||
generator.MarkLabel(endIfLabel);
|
||||
@ -511,5 +520,5 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,17 @@ namespace SqlSugar
|
||||
public static partial class IDataRecordExtensions
|
||||
{
|
||||
|
||||
#region Common Extensions
|
||||
#region Common Extensions
|
||||
public static Func<object, Type, object> DeserializeObjectFunc { get; internal set; }
|
||||
|
||||
public static T GetDeserializeObject<T>(this IDataReader dr, int i)
|
||||
{
|
||||
var obj = dr.GetValue(i);
|
||||
if (obj == null)
|
||||
return default(T);
|
||||
var value = obj;
|
||||
return (T)DeserializeObjectFunc(value, typeof(T));
|
||||
}
|
||||
public static XElement GetXelement(this IDataRecord dr, int i)
|
||||
{
|
||||
var result = XElement.Parse(dr.GetString(i).ToString());
|
||||
|
@ -347,8 +347,14 @@ namespace SqlSugar
|
||||
}
|
||||
if (column.IsJson && columnInfo.Value != null)
|
||||
{
|
||||
if (columnInfo.Value != null)
|
||||
if (this.InsertBuilder.SerializeObjectFunc != null&& columnInfo.Value != null)
|
||||
{
|
||||
columnInfo.Value = this.InsertBuilder.SerializeObjectFunc(columnInfo.Value);
|
||||
}
|
||||
else if (columnInfo.Value != null)
|
||||
{
|
||||
columnInfo.Value = this.Context.Utilities.SerializeObject(columnInfo.Value);
|
||||
}
|
||||
}
|
||||
//var tranColumn=EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase));
|
||||
if (column.IsTranscoding && columnInfo.Value.HasValue())
|
||||
|
@ -378,6 +378,10 @@ namespace SqlSugar
|
||||
var data = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
ids = list.Select(it =>
|
||||
{
|
||||
if (data.ForOwnsOnePropertyInfo == null)
|
||||
{
|
||||
return it.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(it);
|
||||
}
|
||||
var ownsObj = data.ForOwnsOnePropertyInfo.GetValue(it);
|
||||
return ownsObj.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(ownsObj);
|
||||
}).Select(it => it == null ? "null" : it).Distinct().ToList();
|
||||
@ -437,35 +441,64 @@ namespace SqlSugar
|
||||
{
|
||||
// 有 OwnsOne 的情况
|
||||
var data = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
|
||||
var groupQuery = (from l in list
|
||||
let ownsObj = data.ForOwnsOnePropertyInfo.GetValue(l)
|
||||
join n in navList
|
||||
on ownsObj.GetType()
|
||||
.GetProperty(navObjectNameColumnInfo.Navigat.Name)
|
||||
.GetValue(ownsObj)
|
||||
.ObjToString()
|
||||
equals navPkColumn.PropertyInfo.GetValue(n).ObjToString()
|
||||
select new
|
||||
{
|
||||
l,
|
||||
n
|
||||
}).ToList();
|
||||
|
||||
foreach (var item in groupQuery)
|
||||
if (data.ForOwnsOnePropertyInfo == null)
|
||||
{
|
||||
|
||||
// var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString());
|
||||
|
||||
if (navObjectNamePropety.GetValue(item.l) == null)
|
||||
var groupQuery = (from l in list
|
||||
join n in navList
|
||||
on navColumn.PropertyInfo.GetValue(l).ObjToString()
|
||||
equals navPkColumn.PropertyInfo.GetValue(n).ObjToString()
|
||||
select new
|
||||
{
|
||||
l,
|
||||
n
|
||||
}).ToList();
|
||||
foreach (var item in groupQuery)
|
||||
{
|
||||
navObjectNamePropety.SetValue(item.l, item.n);
|
||||
}
|
||||
else
|
||||
{
|
||||
//The reserved
|
||||
}
|
||||
|
||||
// var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString());
|
||||
|
||||
if (navObjectNamePropety.GetValue(item.l) == null)
|
||||
{
|
||||
navObjectNamePropety.SetValue(item.l, item.n);
|
||||
}
|
||||
else
|
||||
{
|
||||
//The reserved
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var groupQuery = (from l in list
|
||||
let ownsObj = data.ForOwnsOnePropertyInfo.GetValue(l)
|
||||
join n in navList
|
||||
on ownsObj.GetType()
|
||||
.GetProperty(navObjectNameColumnInfo.Navigat.Name)
|
||||
.GetValue(ownsObj)
|
||||
.ObjToString()
|
||||
equals navPkColumn.PropertyInfo.GetValue(n).ObjToString()
|
||||
select new
|
||||
{
|
||||
l,
|
||||
n
|
||||
}).ToList();
|
||||
|
||||
foreach (var item in groupQuery)
|
||||
{
|
||||
|
||||
// var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString());
|
||||
|
||||
if (navObjectNamePropety.GetValue(item.l) == null)
|
||||
{
|
||||
navObjectNamePropety.SetValue(item.l, item.n);
|
||||
}
|
||||
else
|
||||
{
|
||||
//The reserved
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -282,6 +282,13 @@ namespace SqlSugar
|
||||
count = parameters.Last().ObjToInt();
|
||||
return reslt;
|
||||
}
|
||||
public DataTable ToDataTablePage(int pageNumber, int pageSize)
|
||||
{
|
||||
var method = QueryableObj.GetType().GetMyMethod("ToDataTablePage",2, typeof(int), typeof(int));
|
||||
var parameters = new object[] { pageNumber, pageSize };
|
||||
var reslt = (DataTable)method.Invoke(QueryableObj, parameters);
|
||||
return reslt;
|
||||
}
|
||||
public DataTable ToDataTable()
|
||||
{
|
||||
var method = QueryableObj.GetType().GetMyMethod("ToDataTable", 0);
|
||||
@ -381,6 +388,13 @@ namespace SqlSugar
|
||||
count = parameters.Last().ObjToInt();
|
||||
return await GetTask(task).ConfigureAwait(false);
|
||||
}
|
||||
public async Task<object> ToDataTablePageAsync(int pageNumber, int pageSize)
|
||||
{
|
||||
var method = QueryableObj.GetType().GetMyMethod("ToDataTablePageAsync", 2, typeof(int), typeof(int));
|
||||
var parameters = new object[] { pageNumber, pageSize };
|
||||
var task = (Task)method.Invoke(QueryableObj, parameters);
|
||||
return await GetTask(task).ConfigureAwait(false);
|
||||
}
|
||||
public async Task<object> ToDataTableAsync()
|
||||
{
|
||||
var method = QueryableObj.GetType().GetMyMethod("ToDataTableAsync", 0);
|
||||
|
@ -660,17 +660,17 @@ namespace SqlSugar
|
||||
/// </summary>
|
||||
/// <param name="whereClass"></param>
|
||||
/// <returns></returns>
|
||||
public ISugarQueryable<T> WhereClass<ClassType>(ClassType whereClass, bool ignoreDefaultValue = false) where ClassType : class, new()
|
||||
public virtual ISugarQueryable<T> WhereClass<ClassType>(ClassType whereClass, bool ignoreDefaultValue = false) where ClassType : class, new()
|
||||
{
|
||||
return WhereClass(new List<ClassType>() { whereClass }, ignoreDefaultValue);
|
||||
}
|
||||
public ISugarQueryable<T> WhereClassByPrimaryKey(List<T> list)
|
||||
public virtual ISugarQueryable<T> WhereClassByPrimaryKey(List<T> list)
|
||||
{
|
||||
_WhereClassByPrimaryKey(list);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> WhereClassByWhereColumns(List<T> list, string[] whereColumns)
|
||||
public virtual ISugarQueryable<T> WhereClassByWhereColumns(List<T> list, string[] whereColumns)
|
||||
{
|
||||
_WhereClassByWhereColumns(list,whereColumns);
|
||||
return this;
|
||||
|
@ -88,6 +88,8 @@ namespace SqlSugar
|
||||
|
||||
#region Methods
|
||||
|
||||
public virtual Func<object, string> SerializeObjectFunc { get; set; }
|
||||
public virtual Func<object, Type, object> DeserializeObjectFunc { get; set; }
|
||||
public virtual void ActionMinDate()
|
||||
{
|
||||
if (this.Parameters != null)
|
||||
@ -393,7 +395,7 @@ namespace SqlSugar
|
||||
}
|
||||
return (Type)columnInfo.SqlParameterDbType == UtilConstants.SqlConvertType;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -413,7 +413,12 @@ namespace SqlSugar
|
||||
if (column.IsJson)
|
||||
{
|
||||
columnInfo.IsJson = true;
|
||||
if (columnInfo.Value != null)
|
||||
var insertBuilder = InstanceFactory.GetInsertBuilder(this.Context?.CurrentConnectionConfig);
|
||||
if (insertBuilder?.SerializeObjectFunc != null&& columnInfo.Value != null)
|
||||
{
|
||||
columnInfo.Value = insertBuilder?.SerializeObjectFunc(columnInfo.Value);
|
||||
}
|
||||
else if (columnInfo.Value != null)
|
||||
columnInfo.Value = this.Context.Utilities.SerializeObject(columnInfo.Value);
|
||||
}
|
||||
if (column.IsArray)
|
||||
|
@ -18,6 +18,10 @@ namespace SqlSugar
|
||||
{
|
||||
public class UtilMethods
|
||||
{
|
||||
public static bool IsKeyValuePairType(Type type)
|
||||
{
|
||||
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>);
|
||||
}
|
||||
public static DataTable ConvertDateTimeOffsetToDateTime(DataTable table)
|
||||
{
|
||||
if (!table.Columns.Cast<DataColumn>().Any(it => it.DataType == typeof(DateTimeOffset)))
|
||||
|
Loading…
Reference in New Issue
Block a user