Reputation: 379
I have below actionresult
public ActionResult TheMostClickedEmailReport(int ID, int gonderim,int? page)
{
int pageIndex = page ?? 1;
int pagesize = 10;
MailingClickService mailingclickservice = new MailingClickService();
TemplateLinkService tmpservice = new TemplateLinkService();
int FirmID = (int)Session["FirmID"];
var linkler = mailingclickservice.GetByCriteria(x => x.MailingID == ID && x.Gonderim == gonderim && x.Mailing.FirmUser.FirmID == FirmID).IslemSonucu.GroupBy(x => x.MailingEmail).ToPagedList(pageIndex, pagesize);
ViewBag.gonderim = gonderim;
ViewBag.MailingID = ID;
List<EmailLinkClickReport> emailcliklistreport = new List<EmailLinkClickReport>();
if (linkler.Count() > 0)
{
foreach (var item in linkler)
{
EmailLinkClickReport emaillinkclick = new EmailLinkClickReport();
emaillinkclick.Key = item.Key;
emaillinkclick.TotalClicksCount = item.Select(x => x.MailingEmail).Count();
emailcliklistreport.Add(emaillinkclick);
}
return View(emailcliklistreport);
}
else
{
return RedirectToAction("MailingReport", "Report", new { id = ID, gonderim = gonderim });
}
}
linkler has 50 data.I select 10 data from linkler by using foreach (item in linkler)
I want to select 10 data in var linkler = mailingclickservice.GetByCriteria(x => x.MailingID == ID && x.Gonderim == gonderim && x.Mailing.FirmUser.FirmID == FirmID).IslemSonucu.GroupBy(x => x.MailingEmail).ToPagedList(pageIndex, pagesize);
part
however i do not know how can i cast linkler to IPagedList by returning view ?
If i return below code
return View(emailcliklistreport);
like below
return View(emailcliklistreport.ToPagedList(pageIndex,pagesize);
it is not logic for me because I return list twice time
What do you recommend and suggest me to change my code.
How can I return linkler to view by casting ToPagedList ?
Upvotes: 1
Views: 821
Reputation: 239280
ToPagedList
should be the last operation your perform on your dataset before returning it to the view. As it stands, you're discarding the PagedList
entirely and merely returning a List<EmailLinkClickReport>
to the view.
Also, for what's worth, there's no need for a foreach loop here, anyways, as you can just use LINQ's Select
method to transform your dataset. Try:
var linkler = mailingclickservice
.GetByCriteria(x =>
x.MailingID == ID &&
x.Gonderim == gonderim &&
x.Mailing.FirmUser.FirmID == FirmID)
.IslemSonucu.GroupBy(x => x.MailingEmail)
.Select(x => new EmailLinkClickReport
{
Key = x.Key;
TotalClicksCount = x.Count();
})
.ToPagedList(pageIndex, pagesize);
I added liberal spacing to make it easier to read. The only new part is the Select
call. Also removed the Select(x => x.MailingEmail)
jazz from TotalClickCounts
, as it does nothing but just add extra processing time.
Upvotes: 2