2016-11-27 14 views
1

私は、decimal型のProductPriceプロパティを含むモデルクラスを持っています。私はプロパティの小数点にIQueryable型を格納することができません。私もConvert.ToDecimalにしようとしましたが、それでも私にエラーが表示されます。IQueryable <decimal> to decimal

モデル - 製品

public class Product 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public decimal ProductPrice { get; set; } 
    public int ProductQty { get; set; } 
} 

モデルCartDispay

public class CartDisplay 
{ 
    public int ItemId { get; set; } 
    public String ProductName { get; set; } 
    public int ProductQty { get; set; } 
    public decimal ProductPrice { get; set; } 
} 

コントローラ

public ActionResult Index() 
    { 
     int userId = 3; 
     var items = _context.Cart.Join(_context.Items, c => c.CartId, i => i.CartId, (c, i) => new { c, i }).Where(c => c.c.UserId == userId).ToList(); 
     foreach(var item in items) 
     { 
      CartDisplay display = new CartDisplay(); 
      display.ItemId = item.i.ItemId; 
      display.ProductName = _context.Product.Where(p => p.ProductId == item.i.ProductId).Select(p => p.ProductName).ToString(); 
      display.ProductPrice = _context.Product.Where(p => p.ProductId == item.i.ProductId).Select(p => p.ProductPrice); ; 
      display.ProductQty = item.i.ProductQty; 
      cartView.CartDisplay.Add(display); 
     } 
     retu 
+3

なぜあなたが期待します'IQueryable 'を 'decimal'に格納できるようにするには? 1つはクエリを記述し、1つは実際の値を記述する。クエリの最後に '.FirstOrDefault()'を追加したいと思うかもしれませんが、それはあなたのビジネスロジックに完全に依存しています。 – Rob

+3

FirstOrDefaultの代わりに。 –

+0

_context.Product.Where(p => p.ProductId == item.i.ProductId).Select(p => p.ProductPrice);これは複数のレコードを返す可能性があり、モデルCartDisplayにはコレクションではなくProductPriceしかないため、このエラーが発生する可能性があります。返されたコレクションの最初の値を与えるFirstOrDefault()を使用できます。モデル構造を変更することもできます。 –

答えて

0

IQueryable<T>は、単一項目ではなく、タイプTの要素のシーケンスを定義します。また、シーケンスをメモリに入れずに追加のクエリを実行することもできますが、それは質問の文脈では重要ではありません。

あなたの状況はいえ、ずっと簡単です。むしろ、個々のプロパティを照会するよりも、あなたはこのように、その個々のプロパティを取り、そのIDによって、全製品について問い合わせる必要があります。

var prod = _context.Product.SingleOrDefault(p => p.ProductId == item.i.ProductId); 
if (prod != null) { 
    display.ProductName = prod.ProductName 
    display.ProductPrice = prod.ProductPrice; 
    display.ProductQty = ... 
} else { 
    // Product with id of item.i.ProductId does not exist 
} 
関連する問題