[英]Cannot implicitly convert type, explicit conversion exists (are you missing a cast?)
[英]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; }
感謝所有回答的人。
您的Products
在ProductIndexViewModel
類中似乎有誤
public class ProductIndexViewModel
{
public IQueryable<ProductIndexViewModel> Products { get; set; }
Products
是一個IQueryable
,這沒有意義,可能應該是List<T>
或IEnumerable<T>
例子
public List<ProductIndexViewModel> Products { get; set; }
Product
或一些 ViewModel 像ProductViewModel
在 ViewModel 的情況下,您需要Select
/Project 到它ToList
例子
viewModel.Products = products.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.