From 9fb7f406a98ac56cb9594a1a93d30d83196aeb9d Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 10 Jun 2023 15:27:37 +0800 Subject: [PATCH] Update db.QueryableByObject --- .../QueryableProvider/QueryMethodInfo.cs | 44 ++++++++++++++++++- .../SqlSugar/Utilities/CommonExtensions.cs | 15 +++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs index 406cfe890..827b68099 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs @@ -3,12 +3,54 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - + namespace SqlSugar { public class QueryMethodInfo { public object QueryableObj { get; internal set; } public SqlSugarProvider Context { get; internal set; } + + public QueryMethodInfo Where(string sql, object parameters) + { + var method = QueryableObj.GetType().GetMyMethod("Where", 2, typeof(string), typeof(object)); + this.QueryableObj= method.Invoke(QueryableObj, new object[] { sql, parameters }); + return this; + } + + public QueryMethodInfo SplitTable(DateTime begintTime,DateTime endTime) + { + var method = QueryableObj.GetType().GetMyMethod("SplitTable", 2, typeof(DateTime), typeof(DateTime)); + this.QueryableObj = method.Invoke(QueryableObj, new object[] {begintTime,endTime }); + return this; + } + public QueryMethodInfo SplitTable() + { + var method = QueryableObj.GetType().GetMyMethod("SplitTable", 0); + this.QueryableObj = method.Invoke(QueryableObj, new object[] { }); + return this; + } + + public object ToPageList(int pageNumber,int pageSize) + { + var method = QueryableObj.GetType().GetMyMethod("ToPageList", 2,typeof(int),typeof(int)); + var reslt = method.Invoke(QueryableObj, new object[] { pageNumber, pageSize }); + return reslt; + } + public object ToPageList(int pageNumber, int pageSize,ref int count) + { + var method = QueryableObj.GetType().GetMyMethod("ToPageList", 3, typeof(int), typeof(int), typeof(int).MakeByRefType()); + var parameters = new object[] { pageNumber, pageSize, count }; + var reslt = method.Invoke(QueryableObj, parameters); + count = parameters.Last().ObjToInt(); + return reslt; + } + public object ToList() + { + var method = QueryableObj.GetType().GetMyMethod("ToList", 0); + var reslt = method.Invoke(QueryableObj, new object[] { }); + return reslt; + } + } } diff --git a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs index 4ffde70b3..3fef49288 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs @@ -32,6 +32,21 @@ namespace SqlSugar it.GetParameters().Length == argCount&& it.GetParameters().First().ParameterType==parameterType); } + public static MethodInfo GetMyMethod(this Type type, string name, int argCount, Type parameterType,Type parameterType2) + { + return type.GetMethods().Where(it=>it.Name == name).FirstOrDefault(it => + it.GetParameters().Length == argCount && + it.GetParameters().First().ParameterType == parameterType&& + it.GetParameters()[1].ParameterType == parameterType2) ; + } + public static MethodInfo GetMyMethod(this Type type, string name, int argCount, Type parameterType, Type parameterType2, Type parameterType3) + { + return type.GetMethods().Where(it => it.Name == name).FirstOrDefault(it => + it.GetParameters().Length == argCount && + it.GetParameters().First().ParameterType == parameterType && + it.GetParameters()[1].ParameterType == parameterType2&& + it.GetParameters()[2].ParameterType == parameterType3); + } public static List ToList(this T thisValue,Func action) where T:class,new() { return new List { thisValue };