2017-04-21 86 views
0

我收到一条错误消息,内容如下: “映射不存在于对象类型<> f__AnonymousType6`1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]到已知的托管提供程序本机类型“。ASP.NET MVC数据仓库

public List<Product> GetCategoryProducts(int catID) 
     { 
      string sql = @"select p.ProductID, p.ItemName, p.ImageName 
          from Product p, ProductCategory pc 
          where p.ProductID = pc.ProductID 
          and pc.CategoryID = @catID 
          order by p.ItemName"; 


      List<Product> products = db.Products.SqlQuery(sql, new { catID }).ToList(); 
      return products; 

     } 

我不知道为什么我收到此错误

+0

它在'SqlQuery'方法帮助中解释。但是为什么还要用SQL呢,这是很简单的LINQ To Entities查询,你没有使用ORM的好处。 –

+2

请不要删除以前的问题并将其更改为新的问题。要么创建一个新问题,要么编辑你的问题以包含附加问题信息(离开旧问题)。通过删除该问题,您可以防止其他人从您的问题中获益。这也令人困惑,为什么有些答案似乎无法解决当前的问题。 –

回答

2

你应该做两件事一)改变你的查询,SqlQuery<Product>B的返回类型)传递参数catID到您的查询:

var products = db.Products 
       .SqlQuery<Product>(sql,new SqlParameter("catID", catID)) 
       .ToList(); 

I am setting pc.CategoryID = @catID.

你的确声明参数化查询,但是你不会为你的参数传递一个值。以下只是一个字符串:

@"select p.ProductID, p.ItemName, p.ImageName 
from Product p, ProductCategory pc 
where p.ProductID = pc.ProductID 
and pc.CategoryID = @catID 
order by p.ItemName" 

你不设置那里为CategoryID任何价值。这是SqlQuery方法的工作,只要你通过一个就可以处理这个问题。

+0

我添加了列表 products = db.Products.SqlQuery(sql,new {catID})。ToList(); 修复标量变量错误 –

+0

现在我得到这个错误:没有从对象类型<> f__AnonymousType6'1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]的映射到已知的托管提供商本机类型 –

+0

@TimothyWong请检查我的更新。 – Christos