Dodido_72 Ответов: 0

Добавьте товар с большим количеством цен в корзину покупок


Привет!
Я пытаюсь добавить продукт со многими ценами в корзину покупок(структура сущностей отношений "один ко многим"). Клиент выбрал специальный размер с его ценой в презентации продукта (короткий список с кнопками справа). Теперь я хочу добавить этот выбранный продукт, размер и цену в свою корзину покупок. Проблема в том, что я не знаю, как получить доступ к конкретной цене (конкретному значению в списке ItemPrice).

Для начала - вот мои классы и мой DbContext:

   public class Item
   {

    private readonly ICollection<ItemPrice> Price;
    public Item(ICollection<ItemPrice> price = null)
    {
        Price = price;
    }
    public Item() : this(null) { }

    [Key]
    public int ItemID { get; set; }

    [Required(ErrorMessage = "Please enter an product name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please specify a category")]
    public string Category { get; set; }

    public string SubCategory { get; set; }

    public string Description { get; set; }

    public string ImageSmallUrl { get; set; }

    public string ImageSmallAlternativeDescription { get; set; }

    public string ImageSmallContentType { get; set; }


    public virtual ICollection<ItemPrice> Prices { get; set; }
}

 public class ItemPrice
{
    [Key]
    public int ID { get; set; }
    public int ItemID { get; set; }
    public string Size { get; set; }
    public decimal Value { get; set; }

    public virtual Item Item { get; set; }

}

  public class ApplicationDbContext : DbContext
    {
    public ApplicationDbContext
    (DbContextOptions<ApplicationDbContext>
    options)
        :base(options) {}

    public DbSet<Item> Items { get; set; }
    public DbSet<ItemPrice> ItemPrices { get; set; }

    protected override void OnModelCreating (ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ItemPrice>()
            .HasOne(p => p.Item)
            .WithMany(b => b.Prices);

    }
}


Я начал работать над магазинной тележкой и картитемом, но теперь я застрял. Я не знаю, как продолжать. Вот классы ShoppingCart и CartItem:


public class ShoppingCart
{
    private List<CartItem> cartItemCollection = new List<CartItem>();

    public virtual void AddCartItem(Item item, int quantity)
    {
        CartItem cartItem = cartItemCollection
            .Where(p => p.Item.ItemID == item.ItemID)
            .FirstOrDefault();
        if(cartItem == null)
        {
            cartItemCollection.Add(new CartItem
            {
                Item = item,
                Quantity = quantity
            });
        }
        else
        {
            cartItem.Quantity += quantity;
        }
    }

    public virtual void RemoveCartItem(Item item) =>
   cartItemCollection.RemoveAll(l => l.Item.ItemID == item.ItemID);

    public virtual decimal ComputeTotalValue()
    {
        return cartItemCollection.Sum(e => e.Item.Prices.) *
  e.Quantity);

    }
}

 public class CartItem
{
    public int CarItemID { get; set; }
    public Item Item { get; set; }
    public int Quantity { get; set; }
}


Я пробовал разные лямбда-выражения и LINQ, но они не работают. Как я могу получить конкретное значение (одно из свойств класса ItemPrice), чтобы получить сумму? Очень благодарен за помощь здесь!

Что я уже пробовал:

Я искал в интернете в течение двух дней и не мог найти хорошего ответа на эту проблему и, конечно же, перепробовал много различных подходов в коде.

Dodido_72

Чтобы уточнить - я хочу этого добиться:
public virtual decimal ComputeTotalValue()=>
cartItemCollection.Сумма(e => e.Item.Цена * е. Количество);
Но поскольку мой товар(он же продукт) имеет несколько цен, я застрял в них
cartItemCollection.Сумма(e => e.Item.Цены. * e.количество).
Что я должен добавить после цены, чтобы получить значение выбранного экземпляра, чтобы его можно было умножить на количество-значение??

0 Ответов