我有一个非常简单的ViewModel(ProductViewModel)
public class ProductViewModel
{
public int ProductID { get; set; }
public int CategoryID { get; set; }
public string ProductName { get; set; }
public string CategoryName { get; set; }
}
在我的控制器中,我抓住了一个特定的产品
var product = _context.Products
.Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id);
return View(product);
在我看来,我将模型定义为
@model MvcApplication1.ViewModels.ProductViewModel
但是,我收到此错误:
传递到字典中的模型项的类型为&System; System.Data.Entity.Infrastructure.DbQuery`1 [MvcApplication1.ViewModels.ProductViewModel]',但此字典需要类型为&的模型项#39; MvcApplication1.ViewModels.ProductViewModel'
我不确定为什么它会抛出该错误,因为我将ProductViewModel传递到视图中...至少看起来像我。任何指导将不胜感激
谢谢!
答案 0 :(得分:2)
您需要执行查询以获取实际的对象类型。调用FirstOrDefault()或ToList()将执行查询。还有.First(),如果在执行查询后找不到该项,则抛出异常。
试试这个:
Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id).FirstOrDefault();//Executes the query
循环结果集也将执行查询。所以,如果你做了类似下面的事情,你就不需要调用FirstOrDefault()或ToList()。
foreach(var item in product)//IF YOU HAVE MULTIPLE ITEMS
item.//THIS IS A SINGLE PRODUCTVIEWMODEL INSTANCE NOW