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