Как связать метод со свойством в MVC? - PullRequest
0 голосов
/ 04 мая 2020

Я изучаю MVC, и в настоящее время я использую учебник MvcMusicStore, но добавляю некоторые дополнительные функции и дополнительные функции.

У меня есть метод, который вычисляет общую стоимость путем умножения количества на цену за единицу.

У меня есть свойство в модели TotalPrice, к которому я хочу, чтобы этот метод был «привязан» к такому значению, что значение TotalPrice исходит из этого метода.

Имя метод GetTotal()

Моя модель выглядит следующим образом:

public class OrderDetail
{
    public int OrderDetailId { get; set; }
    public int OrderId { get; set; }
    public int AlbumId { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal TotalPrice { get; set; }


    public virtual Album Album { get; set; }
    public virtual Order Order { get; set; }

    MusicStoreEntities db = new MusicStoreEntities();
    public decimal GetTotal()
    {

        decimal? total = (from s in db.OrderDetails
                          where s.OrderDetailId == OrderDetailId
                          select (decimal?)Quantity * UnitPrice).Sum();
        return total ?? decimal.Zero;
    }
}

Я хочу, чтобы возвращаемое методом значение заполняло поле TotalPrice, которое в настоящее время равно null, поскольку нет никакого метода, связанного с ним.

Как я могу заставить TotalPrice получить его значение из GetTotal()?

1 Ответ

2 голосов
/ 04 мая 2020

Учитывая, что TotalPrice является свойством, метод можно вызвать из самого свойства:

public decimal TotalPrice 
{ 
  get 
  { 
    return GetTotal();
  }
}

Однако я бы не советовал пытаться извлечь общую цену из базы данных, когда вы сможете используйте данные из модели, так что вы должны сделать это:

public decimal TotalPrice 
{ 
  get 
  { 
    return Quantity * UnitPrice;
  }
}

Если вам нужно сделать сумму всех элементов в заказе, вам нужно реализовать что-то вроде этого в своем классе заказа:

public class Order 
{ 
  List<OrderDetail> OrderDetails {get; set;}
  ....


  public decimal TotalPrice 
  { 
    get 
    {
      decimal total = 0;
      foreach (var o in OrderDetails) 
      {
        total += o.TotalPrice;
      }
      return total;
    }

  }
}

Обновление

Или даже проще (необходимо импортировать System.Linq):

public class Order 
{ 
  List<OrderDetail> OrderDetails {get; set;}
  ....


  public decimal TotalPrice 
  { 
    get 
    {
      OrderDetails.Sum(o => o.TotalPrice);
    }

  }
}
...