2017-05-12 4 views
0

私のデータベースには9アイテムありますが、マップアイテムの後にアイテムの合計数はpageSizeで、常にページャは1ページを表示します。ページャリスト付きのオートマチックンは常に1ページを返します

public async Task<ActionResult> Index(int? page) 
{ 
    int pageSize = 3; 
    int pageNumber = (page ?? 1); 

    var result = db.Projects.OrderByDescending(x => x.StartDate); 
    var model = result.ToPagedList(pageNumber, pageSize); 
    var model2 = AutoMapper.Mapper.Map<PagedList<ProjectViewModel>>(model); 
    return View(model2); 

} 

public class PagedListConverter : ITypeConverter<PagedList<Project>, PagedList<ProjectViewModel>> 
{ 
    public PagedList<ProjectViewModel> Convert(ResolutionContext context) 
    { 
     var model = (PagedList<Project>)context.SourceValue; 
     var vm = model.Select(m => Mapper.Map<Project, ProjectViewModel>(m)).ToList(); 

     return new PagedList<ProjectViewModel>(vm, model.PageNumber, model.PageSize); 
    } 
} 

と私のautomapper構成で、私はこの

を書き留め
AutoMapper.Mapper.CreateMap<Project, ProjectViewModel>(); 

Mapper.CreateMap<PagedList<Project>, PagedList<ProjectViewModel>>().ConvertUsing<PagedListConverter>(); 

答えて

0

あなたはPagedListと一緒にAutoMapperのようなものを使用する必要がある場合は、手動で代わりに、StaticPagedListであなたのページングリストを作成する必要があります。つまり、手動でクエリーセットを制限し、合計カウントを自分で取得する必要があります。たとえば:

int pageSize = 3; 
int pageNumber = (page ?? 1); 

var result = db.Projects.OrderByDescending(x => x.StartDate).Skip(pageSize * (pageNumber - 1)).Take(pageSize); 
var totalResults = db.Projects.Count(); 
var model = AutoMapper.Mapper.Map<List<ProjectViewModel>>(result); 
var model2 = new StaticPagedList<ProjectViewModel>(model, pageNumber, pageSize, totalResults); 
return View(model2); 

これは(合計数を取得するには、ページのアイテムと別のものを選択するために、1)2つのクエリを作る意味が、数えないクエリは比較的速いです。それにもかかわらず、それはAutoMapperによって別のクラスタイプにマップするのページングを行う唯一の方法です。

関連する問題