2012-11-08 7 views
5

Sposób korzystania z PagedList w aplikacji internetowej opartej na ASP MVC w połączeniu z ViewModels.Mapowanie dużej listy jednostek w listę stron kodowych ViewModels

Chcę utworzyć listę stron kodowych Viewmodels, więc najpierw muszę odwzorować elementy na Viewmodels.

Podczas pobierania dużej listy jest ona bardzo powolna, ponieważ najpierw mapowanie jest wykonywane przed utworzeniem listy PagedList (co powoduje pobranie całej listy elementów).

Jaki jest najlepszy sposób rozwiązania tego problemu?

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

(Używam również ramy mapowania, ale to oczywiście ten sam problem z niestandardowej klasy mapper)

+0

skończyłeś spróbuj użyć IQueryable? Czy jest obsługiwany przez twoją usługę danych? Użycie Iqueryable pozwoliłoby IPagedListowi odwieść zapytanie do bazy danych, ograniczając w ten sposób liczbę obiektów odwzorowanych tylko na to, co konieczne. –

Odpowiedz

1

dlaczego nie strony swoich danych na serwerze? A następnie utworzyć ręczny pager jak w przykładzie 2 z troygoode/PagedList?

0

Miałem ten sam problem. I przyspieszyło moje wyniki (nie są jeszcze tak szybko, ale szybciej) przy użyciu IQueryable interfejs zamiast IEnumerable

to zmienić:

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

do tego:

IQueryable<InvoiceData> invoiceData = dataService.GetInvoiceData(locationId); 
Powiązane problemy