簡體   English   中英

無法隱式轉換類型,存在顯式轉換(您是否缺少強制轉換?)

[英]Cannot implicitly convert type, an explicit conversion exists (are you missing a cast?)

我已經設置了一個 ViewModel(之前使用了一個 ViewBag)但是我在下面的代碼中遇到了一個錯誤,我已經研究過它但我個人還沒有弄清楚我的問題:

public ActionResult Index(string category, string search)
    {
        ProductIndexViewModel viewModel = new ProductIndexViewModel();
        var products = db.Products.Include(p => p.Category);

        if (!String.IsNullOrEmpty(search))
        {
            products = products.Where(p => p.Name.Contains(search) ||
                    p.Description.Contains(search) ||
                    p.Category.Name.Contains(search));

            viewModel.Search = search;

        }

        viewModel.CatsWithCount = from matchingProducts in products
                                  where matchingProducts.CategoryID != null
                                  group matchingProducts by
                                  matchingProducts.Category.Name into
                                  catGroup
                                  select new CategoryWithCount()
                                  {
                                      CategoryName = catGroup.Key,
                                      ProductCount = catGroup.Count()
                                  };

        if (!String.IsNullOrEmpty(category))
        {
           products = products.Where(p => p.Category.Name == category);
        }

        viewModel.Products = products;
        return View(viewModel);
    }

錯誤發生在該行的底部:

viewModel.Products = products;

確切的錯誤是

“無法將類型'System.Linq.IQueryable<OnlineStore.Models.Product>'隱式轉換為'System.Linq.IQueryable<OnlineStore.ViewModels.ProductIndexViewModel>' 。存在顯式轉換(您是否缺少演員表?)”

我對使用 Visual Studio 很陌生,只是想知道我必須做些什么來修復這個錯誤。

編輯:

產品索引視圖模型:

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace OnlineStore.ViewModels
{
    public class ProductIndexViewModel
    {
        public IQueryable<ProductIndexViewModel> Products { get; set; }
        public string Search { get; set; }
        public IEnumerable<CategoryWithCount> CatsWithCount { get; set; }
        public string Category { get; set; }
        public IEnumerable<SelectListItem> CatFilterItems
        {
            get
            {
                var allCats = CatsWithCount.Select(cc => new SelectListItem
                {
                    Value = cc.CategoryName,
                    Text = cc.CatNameWithCount
                });
                return allCats;
            }
        }
    }
    public class CategoryWithCount
    {
        public int ProductCount { get; set; }
        public string CategoryName { get; set; }
        public string CatNameWithCount
        {
            get
            {
                return CategoryName + " (" + ProductCount.ToString() + ")";
            }
        }
    }
}````

問題出在我的 ProductIndexViewModel 類中。 我有

public IEnumerable<ProductIndexViewModel> Products { get; set; } 

代替

public IEnumerable<Product> Products { get; set; }

感謝所有回答的人。

您的ProductsProductIndexViewModel類中似乎有誤

public class ProductIndexViewModel
{
    public IQueryable<ProductIndexViewModel> Products { get; set; }

  1. Products是一個IQueryable ,這沒有意義,可能應該是List<T>IEnumerable<T>

例子

public List<ProductIndexViewModel> Products { get; set; }

  1. 通用參數看起來不對,它可能應該是Product或一些 ViewModel 像ProductViewModel在 ViewModel 的情況下,您需要Select /Project 到它

  1. 您可能應該在結果上調用ToList

例子

viewModel.Products = products.ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM