2016-11-27 54 views
1

我有一個模型類,其中包含一個屬性ProductPrice類型的十進制。我無法將IQueryable類型存儲到屬性小數。我甚至試圖Convert.ToDecimal,但它仍然顯示我的錯誤。IQueryable <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」中?一個描述查詢,一個描述實際價值。也許你想在查詢結尾添加'.FirstOrDefault()',但這完全取決於你的業務邏輯。 – Rob

+3

FirstOrDefault而不是Where .. –

+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 
}