ASP.NET 对 ViewModel 的 MVC 查询

ASP.NET MVC Query to ViewModel

我有一个非常简单的 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

但是,我收到此错误:

The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[MvcApplication1.ViewModels.ProductViewModel]', but this dictionary requires a model item of type 'MvcApplication1.ViewModels.ProductViewModel'.

我不确定为什么会抛出该错误,因为我将 ProductViewModel 传递到视图中...至少看起来像我。任何指导将不胜感激

谢谢!

您需要执行查询以取回实际的对象类型。调用 FirstOrDefault() 或 ToList() 将执行查询。还有.First(),如果执行查询后找不到item,会抛出异常。

试试这个:

 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