将任意类型的 IQueryable 发送到通用方法
Send an IQueryable of arbitrary type to a general method
问题:我正在尝试创建一个通用方法,该方法将接受一个 IQueryable
,它可以是许多不同类型的数据,包括自定义数据。在这种方法中,我将根据传入的 IQueryable
的类型进行排序。
我正在做的是使用以下内容创建自定义 class:
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
类型?
我发现这适用于排序 table 方法:
var entity = so.entity.AsQueryable().OrderBy("UserName");
var data = entity.Skip(so.pageSize*(so.pageIndex-1)).Take(so.pageSize);
我想你想要的是涉及泛型的解决方案 - 试试
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
您希望 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);
问题:我正在尝试创建一个通用方法,该方法将接受一个 IQueryable
,它可以是许多不同类型的数据,包括自定义数据。在这种方法中,我将根据传入的 IQueryable
的类型进行排序。
我正在做的是使用以下内容创建自定义 class:
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
类型?
我发现这适用于排序 table 方法:
var entity = so.entity.AsQueryable().OrderBy("UserName");
var data = entity.Skip(so.pageSize*(so.pageIndex-1)).Take(so.pageSize);
我想你想要的是涉及泛型的解决方案 - 试试
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
您希望 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);