问题:我正在尝试创建一个将采用IQueryable
的通用方法,该方法可以是许多不同类型的数据,包括自定义。在这个方法中,我将根据传入的IQueryable
的类型进行排序。
我正在做的是创建一个包含以下内容的自定义类:
public class sortObject
{
public String OrderParam { get; set; }
public int pageSize { get; set; }
public int pageIndex { get; set; }//This is what page the user is on
public IQueryable<dynamic> entity { get; set; }
}
我会将IQueryable对象传递给这个对象,如下所示:
sortObject so = new sortObject();
so.entity = _context.userAcount.Select(x=>x);
...
so.entity
将是IQueryable<dynamic>
但是在对象的基本部分(在调试时)将是userAccount类型。我希望基数中的数据能够运行搜索。
我的问题是我不知道IQueryable
类型在运行时是什么,因为这是一般方法。它可以是用户类型,也可以是类型地址等,但排序仍然有效,因为我将在sortObject中传入我想要的内容。
如何在运行时获取基础数据或转换IQueryable
类型?
我发现这适用于排序表方法:
var entity = so.entity.AsQueryable().OrderBy("UserName");
var data = entity.Skip(so.pageSize*(so.pageIndex-1)).Take(so.pageSize);
答案 0 :(得分:2)
我认为你想要的是一个涉及泛型的解决方案 - 试试
public class sortObject<T>
{
public String OrderParam { get; set; }
public int pageSize { get; set; }
public int pageIndex { get; set; }//This is what page the user is on
public IQueryable<T> entity { get; set; }
}
这样您就可以声明sortObject
entity
的{{1}}类型IQuerable
。
您可以使您的方法类似
public void DoSomething<T>(sortObject<T> input)
{
// input.entity is now of type T
}
你可以致电
sortObject so = new sortObject<userAccount>();
so.entity = _context.userAcount.Select(x=>x);
DoSomething(so);