2017-04-21 22 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

を取得していますなぜあなたは二つのことa)は、クエリの戻り値の型を変更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、バージョン= 4.0.0.0、カルチャ=ニュートラル、PublicKeyToken = b77a5c561934e089]]からマッピングが存在しません。既知のマネージプロバイダのネイティブタイプ。 –

+0

@TimothyWong更新を確認してください。 – Christos