Asp.net mvc 将大型实体列表映射到ViewModels页面列表

Asp.net mvc 将大型实体列表映射到ViewModels页面列表,asp.net-mvc,viewmodel,pagedlist,Asp.net Mvc,Viewmodel,Pagedlist,如何在基于ASP MVC和ViewModels的web应用程序中使用PagedList 我想制作Viewmodels的页面列表,因此首先我必须将实体映射到Viewmodels 当我获取一个大的列表时,它的速度非常慢,因为首先映射是在创建PagedList之前执行的(因此获取整个实体列表) 解决这个问题的最好办法是什么 IEnumerable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId); Mapp

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

我想制作Viewmodels的页面列表,因此首先我必须将实体映射到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);
IEnumerable invoiceData=dataService.GetInvoiceData(locationId);
CreateMap();
IEnumerable vmInvoiceData=Mapper.Map(invoiceData);
IPagedList pagedListVMInvoiceData=vmInvoiceData.ToPagedList(页面,页面大小);

(我也使用映射框架,但自定义映射器类当然也存在同样的问题)

为什么不在服务器上分页数据?在那之后,从?

创建手动寻呼机,如例2中所示,我遇到了同样的问题。我通过使用IQueryable接口而不是IEnumerable加速了我的结果(它们仍然没有那么快,但是更快)

更改此项:

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

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

您是否尝试改用IQueryable?您的数据服务支持它吗?使用Iqueryable将允许IPagedList将查询定义到数据库中,从而限制仅映射到所需对象的对象数量。