2012-11-08 51 views
5

Cách sử dụng PagedList trong ứng dụng web dựa trên ASP MVC kết hợp với ViewModels.Lập bản đồ danh sách các đối tượng lớn thành một danh sách PagedList của ViewModels

Tôi muốn tạo một danh sách PagedList của Chế độ xem, vì vậy trước tiên tôi phải ánh xạ đối tượng thành Chế độ xem.

Khi tôi tìm nạp một danh sách lớn, nó rất chậm vì trước tiên ánh xạ được thực hiện trước khi PagedList được tạo (do đó toàn bộ Danh sách các thực thể được tìm nạp).

Cách tốt nhất để giải quyết vấn đề này là gì?

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); 

(tôi cũng sử dụng một khuôn khổ lập bản đồ, nhưng đó là tất nhiên cùng một vấn đề với một lớp mapper tùy chỉnh)

+0

Bạn có hãy thử sử dụng IQueryable? Nó có được dataService của bạn hỗ trợ không? Sử dụng Iqueryable sẽ cho phép IPagedList deffer truy vấn vào cơ sở dữ liệu, do đó hạn chế số lượng đối tượng được ánh xạ tới chỉ những gì cần thiết. –

Trả lời

1

Tại sao bạn không trang dữ liệu của bạn trên máy chủ? Và sau đó tạo máy nhắn tin thủ công như ví dụ 2 từ troygoode/PagedList?

0

Tôi gặp vấn đề tương tự. Tôi đẩy mạnh kết quả của tôi (họ vẫn không phải là nhanh, nhưng nhanh hơn) bằng cách sử dụng giao diện IQueryable thay vì IEnumerable

Thay đổi này:

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

Để này:

IQueryable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId); 
Các vấn đề liên quan