Update db.QueryableByObject

This commit is contained in:
sunkaixuan
2023-06-10 15:27:37 +08:00
parent 4551798a67
commit 9fb7f406a9
2 changed files with 58 additions and 1 deletions

View File

@@ -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;
}
}
}

View File

@@ -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<T> ToList<T>(this T thisValue,Func<T,T> action) where T:class,new()
{
return new List<T> { thisValue };