c# - IPagedList.MVC, set the total size? -


i building application using asp.net mvc 5 , have grid working ipagedlist.mvc version 4.5.0.0, automapper , entity framework.

in project have businesslayer action talks to, don't want action method talk entity framework directly. bll has following method:

        public ipagedlist<activecontractviewmodel> getallcontracts(string regnumfilter, int page)     {         var lstcontractviewmodel = new list<activecontractviewmodel>();         using (activecontractrepository activecontractrepos = new activecontractrepository(new unitofwork()))         {             var activecontractlist = activecontractrepos.all.orderbydescending(x => x.id).include(c => c.contractor);              if (regnumfilter.trim().length > 0)             {                 activecontractlist = activecontractrepos.all.where(x => x.registrationnumber.contains(regnumfilter)).orderbydescending(x => x.id).include(c => c.contractor);             }              foreach (var activecontract in activecontractlist)             {                 mapper.createmap<domainclasses.activecontract, activecontractviewmodel>().formember(dest => dest.contractormodel, opts => opts.mapfrom(src => new contractorviewmodel                     {                         id = src.contractor.id,                         name = src.contractor.name,                         contactperson = src.contractor.contactperson,                         phone = src.contractor.phone,                         fax = src.contractor.fax,                         address = src.contractor.address,                         vendornumber = src.contractor.vendornumber,                         federaltaxid = src.contractor.federaltaxid                     }                 ));                  mapper.assertconfigurationisvalid();                 lstcontractviewmodel.add(mapper.map<activecontractviewmodel>(activecontract));             }         }          return lstcontractviewmodel.topagedlist(page, 20);     } 

i'm mapping activecontract class (from entity framework) model (activecontractviewmodel) works fine, data returned , paging works. noticed while debugging foreach loop go through records, if have 2500 records loops through building large list, use on topagelist method.

is there better way around this, can build model , fill 20 records need , have ipagedlist know total size?

thats because retrieving items. in linq queries, filtering regnumfilter

var activecontractlist = activecontractrepos     .all     .orderbydescending(x => x.id)     .include(c => c.contractor);  activecontractlist = activecontractrepos     .all     .where(x => x.registrationnumber.contains(regnumfilter))     .orderbydescending(x => x.id)     .include(c => c.contractor); 

to retrieve specific number of rows(in case 20 items per page), use skip() , take() before iterate results.

sample code:

var activecontractlist = activecontractlist      .skip(20 * page)     .take(20);  foreach (var activecontract in activecontractlist) {     .... } 

Comments

Popular posts from this blog

java - Intellij Synchronizing output directories .. -

git - Initial Commit: "fatal: could not create leading directories of ..." -