2012-11-08 11 views
5

Come utilizzare PagedList in un'applicazione Web basata su ASP MVC in combinazione con ViewModels.Mappatura di un ampio elenco di entità in una lista di paging di ViewModels

Desidero creare una lista di visualizzazioni di Viewmodels, quindi prima devo mappare le entità su Viewmodels.

Quando recupero una lista di grandi dimensioni, è molto lenta perché prima la mappatura viene eseguita prima che venga eseguita la PagedList (quindi viene recuperata l'intera lista di entità).

Qual è il modo migliore per risolvere questo problema?

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

(Io uso anche un quadro di mappatura, ma è ovviamente lo stesso problema con una classe mapper personalizzato)

+0

avete fatto provare ad usare IQueryable invece? È supportato dal tuo data service? L'utilizzo di Iqueryable consentirebbe a IPagedList di defferare la query nel database limitando in tal modo il numero di oggetti mappati solo al necessario. –

risposta

1

Perché non hai fatto la pagina dei dati su server? E dopo creare manualmente il cercapersone come nell'esempio 2 di troygoode/PagedList?

0

Ho avuto lo stesso problema. Ho accelerato i miei risultati (che non sono ancora così veloce, ma più veloce) utilizzando l'interfaccia IQueryable invece del IEnumerable

Modifica questo:

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

A tal:

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