将大型实体列表映射到ViewModel的PagedList

时间:2012-11-08 16:18:50

标签: asp.net-mvc viewmodel pagedlist

如何在基于ASP MVC和ViewModels的Web应用程序中使用PagedList。

我想制作Viewmodels的PagedList,所以首先我必须将实体映射到Viewmodels。

当我获取一个大型列表时,它非常慢,因为首先在构建PagedList之前执行映射(因此获取整个实体列表)。

解决此问题的最佳方法是什么?

IEnumerable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId);

Mapper.CreateMap<InvoiceData, ViewModelInvoiceData>();
IEnumerable<ViewModelInvoiceData> vmInvoiceData = Mapper.Map<IEnumerable<InvoiceData>, IEnumerable<ViewModelInvoiceData>>(invoiceData);

IPagedList<InvoiceDataViewModel> pagedListVMInvoiceData = vmInvoiceData.ToPagedList(page, pageSize);

(我也使用了一个映射框架,但它当然与自定义映射器类有同样的问题)

2 个答案:

答案 0 :(得分:1)

为什么您没有在服务器上分页?之后,在troygoode / PagedList

中创建示例2中的手动寻呼机

答案 1 :(得分:0)

我有同样的问题。我通过使用IQueryable接口而不是IEnumerable来加速我的结果(它们仍然没有那么快,但更快)

改变这个:

IEnumerable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId);

对此:

IQueryable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId);