假设我有一个实体,看起来像这样:
public class Album()
{
public DateTime LastUpdated { get; set; }
public List<Picture> Pictures { get; set; }
}
我要做的是创建一个
LastActivity
属性,用于返回最新活动的日期。对于Pictures
集合而言,这很容易实现:public DateTime LastActivity
{
get { return Pictures.Max(x => x.LastUpdated); }
}
然而,我也希望考虑Album
实体上的LastUpdated
属性。我可以使用以下代码:
public DateTime LastActivity
{
get { return Pictures.Max(x => x.LastUpdated) > this.LastUpdated
? Pictures.Max(x => x.LastUpdated)
: this.LastUpdated) };
}
但这样做很糟糕,因为它将执行两次Max()
转换。有没有更好的编写此代码的方法?
答案
这是我根据接受的答案提出的解决方案:
public virtual DateTime LastActivity
{
get
{
var max = Pictures.Any() ? Pictures.Max(x => x.LastUpdated) : DateTime.MinValue;
return max > this.LastUpdated ? max : this.LastUpdated;
}
}
需要注意的是,如果您对一个空集合执行Max()
操作,将会引发异常,因此您必须首先检查集合中是否有任何内容。