属性 getter 中 LINQ 查询的性能优化



所以我有一个类,它模拟了商店中制造的SaleSale类有PaymentList。销售类始终具有一个名为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所以我也不确定是否会有大量的性能消耗。

您可以完全控制此列表,无法从外部对其进行修改。因此,请提供添加或删除付款并计算那里的价值的方法:

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;
}
}

最新更新