C# IQueryable<;十进制>;十进制
我有一个模型类,它包含decimal类型的ProductPrice属性。我无法将IQueryable类型存储到属性decimal。我甚至尝试将.ToDecimal转换为,但它仍然显示错误 型号-产品C# IQueryable<;十进制>;十进制,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个模型类,它包含decimal类型的ProductPrice属性。我无法将IQueryable类型存储到属性decimal。我甚至尝试将.ToDecimal转换为,但它仍然显示错误 型号-产品 public class Product { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ProductId { get; set; } public string ProductName
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
IQueryable
定义了类型为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
}
为什么您希望能够将
IQueryable
存储到十进制
?一个描述查询,一个描述实际值。也许您希望在查询末尾添加.FirstOrDefault()
,但这完全取决于您的业务逻辑。FirstOrDefault而不是Where..\u context.Product.Where(p=>p.ProductId==item.i.ProductId)。选择(p=>p.ProductPrice);这可能会返回多条记录,并且由于您的模型CartDisplay只有ProductPrice(而不是collection),您可能会遇到此错误。可以使用FirstOrDefault()从返回的集合中给出第一个值。或者您可以更改模型结构。