我有以下行动方法: -
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和分页。任何人都可以建议如何解决这个问题?
答案 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; }
}