Reputation: 17
I am working on one project and I have a question regarding the converting type. I want to create simple search for my project, but it keeps asking about Ienumerable
type, which honestly I did not understand. Please help.
The problem:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'PagedList.IPagedList'. An explicit conversion exists (are you missing a cast?) C:\Users\Asus\Documents\Visual Studio 2012\Projects\Nordstromapp\Nordstromapp\Controllers\ProductController.cs 38 24 Nordstromapp
My code:
{
NordstromEntities _db;
public ProductController()
{
_db = new NordstromEntities();
}
//
// GET: /Product/
public ActionResult Index(string sortOrder, string CurrentSort, int? page, string searchString)
{
int pageSize = 10;
int pageIndex = 1;
pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
ViewBag.CurrentSort = sortOrder;
sortOrder = String.IsNullOrEmpty(sortOrder) ? "ID" : sortOrder;
IPagedList<Product_list> products = null;
if (!String.IsNullOrEmpty(searchString))
{
products = products.Where(m => m.ID.ToUpper().Contains(searchString.ToUpper())
|| m.Product_name.ToUpper().Contains(searchString.ToUpper()));
}
switch (sortOrder)
{
case "ID":
if(sortOrder.Equals(CurrentSort))
products = _db.Product_list.OrderByDescending
(m => m.ID).ToPagedList(pageIndex, pageSize);
else
products = _db.Product_list.OrderBy
(m => m.ID).ToPagedList(pageIndex, pageSize);
break;
case "Product_name":
if (sortOrder.Equals(CurrentSort))
products = _db.Product_list.OrderByDescending
(m => m.Product_name).ToPagedList(pageIndex, pageSize);
else
products = _db.Product_list.OrderBy
(m => m.Product_name).ToPagedList(pageIndex, pageSize);
break;
case "Product_category":
if (sortOrder.Equals(CurrentSort))
products = _db.Product_list.OrderByDescending
(m => m.Product_category).ToPagedList(pageIndex, pageSize);
else
products = _db.Product_list.OrderBy
(m => m.Product_category).ToPagedList(pageIndex, pageSize);
break;
case "Price":
if (sortOrder.Equals(CurrentSort))
products = _db.Product_list.OrderByDescending
(m => m.Price).ToPagedList(pageIndex, pageSize);
else
products = _db.Product_list.OrderBy
(m => m.Price).ToPagedList(pageIndex, pageSize);
break;
}
return View(products);
}
Upvotes: 1
Views: 11620
Reputation: 218960
While products
is indeed of type IPagedList<Product_List>
, the call to .Where()
on an instance of IPagedList<Product_List>
returns an IEnumerable<Product_List>
, which can't be implicitly converted. Notice how you perform conversions here:
products = _db.Product_list.OrderByDescending(m => m.ID)
.ToPagedList(pageIndex, pageSize);
You just need to perform the same conversion after your .Where()
call:
products = products.Where(m => m.ID.ToUpper().Contains(searchString.ToUpper()) ||
m.Product_name.ToUpper().Contains(searchString.ToUpper()))
.ToPagedList(pageIndex, pageSize);
Upvotes: 2