C# IQueryable<;十进制>;十进制

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

我有一个模型类,它包含decimal类型的ProductPrice属性。我无法将IQueryable类型存储到属性decimal。我甚至尝试将.ToDecimal转换为,但它仍然显示错误

型号-产品

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()从返回的集合中给出第一个值。或者您可以更改模型结构。