因此,我有一个用于模拟商店中制造的Sale
的类。 Sale
类的List
中的Payment
。销售类始终具有一个名为PointsPaid
的属性,该属性使用LINQ来查找以忠诚度积分支付的付款金额之和。这就是班级的样子。
public class Sale
{
private List<Payment> Payments {get;set;}
public decimal PointsPaid
{
get
{
return Payments.Where(p => p.PaymentType == PaymentType.Points)
.Sum(p => p.Amount) * LoyaltyRate
}
}
}
我的问题是:有没有一种方法可以为PointsPaid
实现相同的功能,而不必每次我想获取金额时都执行LINQ查询。我从来不需要处理优化性能,但这是针对实际客户的。
每个Sale
对象可能只有一个Payment
,所以我也不确定是否会大量消耗性能。
答案 0 :(得分:0)
您对此列表拥有完全控制权,无法从外部进行修改。因此,请提供添加或删除付款并在那里计算值的方法:
public class Sale
{
private List<Payment> Payments {get;set;} // initialize in constructor
private decimal _sumPointsAmount;
public decimal LoyaltyRate { get; private set; } // set via constructor
public decimal PointsPaid => _sumPointsAmount * LoyaltyRate;
public void AddPayment(Payment p)
{
Payments.Add(p);
if (p.PaymentType == PaymentType.Points)
_sumPointsAmount += p.Amount;
}
public bool RemovePayment(Payment p)
{
bool removed = Payments.Remove(p);
if(removed && p.PaymentType == PaymentType.Points)
_sumPointsAmount -= p.Amount;
return removed;
}
}