1

私は次のアクションメソッドを持っています:-

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 とページングを適用できません。これを解決する方法について誰かアドバイスできますか?

4

1 に答える 1

1

暗闇でのショットですが、これはどうでしょうか。

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

AllFindRacks は 1 つのオブジェクトを返しますが、その 1 つのオブジェクトには 2 つの 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; }
}
于 2013-08-09T13:44:13.267 に答える