diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/DynamicSelectModel.cs b/Src/Asp.NetCore2/SqlSugar/Entities/DynamicSelectModel.cs index 2d880c039..2603f727c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Entities/DynamicSelectModel.cs +++ b/Src/Asp.NetCore2/SqlSugar/Entities/DynamicSelectModel.cs @@ -1,7 +1,9 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace SqlSugar { @@ -25,6 +27,23 @@ namespace SqlSugar return method.Invoke(Value, null); } + public async Task ToListAsync() + { + if (Value is null) + { + throw new InvalidOperationException("Value cannot be null."); + } + + var method = Value.GetType().GetMyMethod("ToListAsync", 0); + if (method == null) + { + throw new InvalidOperationException("The Value object does not have a ToListAsync method with no parameters."); + } + + var task = (Task)method.Invoke(Value, null); + return await GetTask(task).ConfigureAwait(false); + } + public object ToPageList(int pageNumber, int pageSize) { if (Value is null) @@ -41,6 +60,23 @@ namespace SqlSugar return method.Invoke(Value, new object[] { pageNumber, pageSize }); } + public async Task ToPageListAsync(int pageNumber, int pageSize) + { + if (Value is null) + { + throw new InvalidOperationException("Value cannot be null."); + } + + var method = Value.GetType().GetMyMethod("ToPageListAsync", 2); + if (method == null) + { + throw new InvalidOperationException("The Value object does not have a ToPageListAsync method with two parameters."); + } + + var task = (Task)method.Invoke(Value, new object[] { pageNumber, pageSize }); + return await GetTask(task).ConfigureAwait(false); + } + public object ToPageList(int pageNumber, int pageSize, ref int totalNumber) { if (Value is null) @@ -59,5 +95,33 @@ namespace SqlSugar totalNumber = (int)parameters[2]; return result; } + + public async Task ToPageListAsync(int pageNumber, int pageSize, int totalNumber) + { + if (Value is null) + { + throw new InvalidOperationException("Value cannot be null."); + } + + var method = Value.GetType().GetMyMethod("ToPageListAsync", 3); + if (method == null) + { + throw new InvalidOperationException("The Value object does not have a ToPageListAsync method with three parameters."); + } + + var parameters = new object[] { pageNumber, pageSize, totalNumber }; + var task = (Task)method.Invoke(Value, parameters); + var result = await GetTask(task).ConfigureAwait(false); + totalNumber = (int)parameters[2]; + return result; + } + + private static async Task GetTask(Task task) + { + await task.ConfigureAwait(false); // 等待任务完成 + var resultProperty = task.GetType().GetProperty("Result"); + var value = resultProperty.GetValue(task); + return value; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.NetCore2/SqlSugar/Infrastructure/ContextMethods.cs index 035378421..b8f6ecb95 100644 --- a/Src/Asp.NetCore2/SqlSugar/Infrastructure/ContextMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Infrastructure/ContextMethods.cs @@ -332,7 +332,8 @@ namespace SqlSugar public List DataReaderToListNoUsing(IDataReader reader) { var tType = typeof(T); - var classProperties = tType.GetProperties().ToList(); + var classProperties = tType.GetProperties() + .Where(p => p.GetIndexParameters().Length == 0).ToList(); var reval = new List(); if (reader != null && !reader.IsClosed) { @@ -357,7 +358,7 @@ namespace SqlSugar using (reader) { var tType = typeof(T); - var classProperties = tType.GetProperties().ToList(); + var classProperties = tType.GetProperties().Where(p => p.GetIndexParameters().Length == 0).ToList(); var reval = new List(); if (reader != null && !reader.IsClosed) { @@ -424,7 +425,7 @@ namespace SqlSugar public async Task> DataReaderToListAsyncNoUsing(IDataReader reader) { var tType = typeof(T); - var classProperties = tType.GetProperties().ToList(); + var classProperties = tType.GetProperties().Where(p => p.GetIndexParameters().Length == 0).ToList(); var reval = new List(); if (reader != null && !reader.IsClosed) {