错误:“无法隐式转换类型” [英] Error: "Cannot implicitly convert type"

查看:111
本文介绍了错误:“无法隐式转换类型”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究一个项目,并对转换类型有疑问。我想为我的项目创建简单的搜索,但不断询问 Ienumerable 类型,这实际上我不明白。请帮助。

问题:

lockquote

错误1无法隐式转换类型' System.Collections.Generic.IEnumerable'到'PagedList.IPagedList'。存在明确的转换(您是否缺少演员?)C:\Users\Asus\Documents\Visual Studio 2012\Projects\Nordstromapp\Nordstromapp\Controllers\ProductController.cs 38 24 Nordstromapp p>

我的代码:

  {
Nordstrom实体_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; $!


$ b if(!String.IsNullOrEmpty(searchString))
{
products = products.Where(m => m.ID.ToUpper ().Contains(searchString.ToUpper())
|| m.Product_name.ToUpper()。Contains(searchString.ToUpper()));

$ b $ switch(sortOrder)
{
caseID:
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);
休息;

caseProduct_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);
休息;

caseProduct_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);
休息;

casePrice:
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);
休息;


}
return查看(产品);


解决方案

products 确实是类型 IPagedList< Product_List> ,调用 .Where() IPagedList< Product_List> 的实例上返回 IEnumerable< Product_List> ,不能被隐式转换。请注意您在此处执行转换的方式:

  products = _db.Product_list.OrderByDescending(m => m.ID)
。ToPagedList(pageIndex,pageSize);

您只需在 .Where() call:

  products = products.Where(m => m.ID.ToUpper()。 Contains(searchString.ToUpper()))
.ToPagedList(pageIndex,pageSize);包含(searchString.ToUpper())||
m.Product_name.ToUpper()。


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

解决方案

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

这篇关于错误:“无法隐式转换类型”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆