2017-03-05 8 views
0

オブジェクトタイプProductで応答するASP.NET Web APIから応答を取得したいと考えています。私はポストマンとの応答を取得しようとすると、varをC#のクラスオブジェクトに変換します

しかし、それは常に

500内部サーバーエラーを私に返します。提供するすべての助けを事前に

以下

私のコードがある、おかげで:IEnumerableを返す

[ResponseType(typeof(Product))] 
[Route("webapi/products/{productname}")] 
public async Task<IHttpActionResult> GetProduct(string productname) 
{ 
    var product = (Product)db.Products.Where(t => t.name.Contains(productname)); 
    //^^^^^^this seems to be the problem^^^^^^^// 

    if (product == null) 
    { 
     return NotFound(); 
    } 

    return Ok(product); 
} 

答えて

1

をどこに(複数あるかもしれないことを意味する)IQueryable<Product>を返し、それが製品にキャストすることはできません。

var product = (Product)db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault(); 

これはのように単純化することができます:あなたは一つだけにしたい場合は は、その後、あなたは結果から最初に取ることができます

var product = db.Products.FirstOrDefault(t => t.name.Contains(productname)); 

これが第一の条件やない場合はnullをMACH製品のあなたを与えるだろうそうです。

編集:コメントに記載されているとおり、キャストはここでは必要ありませんが、元の問題に関連する最初の例では残しています。おかげで、ニコ。

+0

大変ありがとうございます。私はLinqにはとても新しいので、リストに入れなければなりませんでした – Kenneth951Lo

+2

'Product'にキャストする理由はありません。' FirstOrDefault() 'の結果は' Product'の型になり、コンパイラはこれを知っています。 – Nico

0

、あなたは製品にそれをキャストすることはできません。あなたが唯一の最初に一致する値が必要な場合、あなたはこのような終わりでFirstOrDefaultを呼び出すことができます。

var product = db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault(); 
+0

私は1つの答えしか受け入れることができませんでしたが、@影が速かった – Kenneth951Lo

関連する問題