将任意类型的 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; }
}

这将允许您声明 sortObjectentity 您希望 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);