如何将分页应用于非列表类型

时间:2013-08-09 13:36:33

标签: linq entity-framework

我有以下行动方法: -

public ActionResult Index(string searchTerm=null, int page = 1)
{
            var racks = repository.AllFindRacks(searchTerm).OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5) ;

            if (Request.IsAjaxRequest())
            {

                return PartialView("_RackTable", racks);
            }
            return View(racks);
}

调用以下存储库方法: -

public RackJoinList AllFindRacks(string q)
{
            RackJoinList rjlist = new RackJoinList();
            var racks = from rack in tms.TMSRacks.Where(a => a.Technology.Tag.ToUpper().StartsWith(q.ToUpper()) || (q == null))

                  select rack;

            rjlist.Racks = racks.ToList();
            var resources = from resource in entities.Resources
                            join c in rjlist.Racks
                            on resource.RESOURCEID equals c.Technology.IT360ID
                            select resource;
            rjlist.Resources = resources;

            return rjlist;
}

RackJoinList视图模型是: -

public class RackJoinList
{
        public IEnumerable<TMSRack> Racks { get; set; }
        public IEnumerable<Resource> Resources { get; set; }
}

但由于存储库方法返回单个对象,我无法对其应用orderby和分页。任何人都可以建议如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在黑暗中只是一枪但是这个:

RackJoinList list = repository.AllFindRacks(searchTerm);
list.Racks = list.Racks.OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5);

AllFindRacks返回一个对象,但是该对象中有两个IEnumerable集合,Racks和Resources。我假设你想在这里调用Racks上的OrderBy。

编辑说明:

我做的是这个;

存储RackJoinList对象,因为这将在稍后的其他地方发送。

更改RackJoinList对象的Racks集合。

使用更改的Racks集合发送RackJoinList对象。

警告:我不确定ToPagedList是如何工作的。它上面有文件吗?我试过Google无济于事。

编辑#2:

以下是基于PagedList源代码重构的方法。这里需要注意的是我无法编译这个,所以我不知道PagedList<TMSRack>是否是正确的类型。让我们知道使用var编写文档很烦人的情况!

public ActionResult Index(string searchTerm=null, int page = 1)
{
    RackJoinList list = repository.AllFindRacks(searchTerm);
    list.PagedRacks = list.Racks.OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5);

    if (Request.IsAjaxRequest())
    {
        return PartialView("_RackTable", racks);
    }

    return View(list);
}

public class RackJoinList
{
    public IEnumerable<TMSRack> Racks { get; set; }
    public IEnumerable<Resource> Resources { get; set; }
    public PagedList<TMSRack> PagedRacks { get; set; }
}