Dan*_* T. 3 c# linq collections comparison max
假设我有一个看起来像这样的实体:
public class Album()
{
public DateTime LastUpdated { get; set; }
public List<Picture> Pictures { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个LastActivity属性,该属性将返回活动的最新日期.这对于Pictures集合来说很容易:
public DateTime LastActivity
{
get { return Pictures.Max(x => x.LastUpdated); }
}
Run Code Online (Sandbox Code Playgroud)
但是,我也想考虑实体LastUpdated上的属性Album.我可以使用这段代码:
public DateTime LastActivity
{
get { return Pictures.Max(x => x.LastUpdated) > this.LastUpdated
? Pictures.Max(x => x.LastUpdated)
: this.LastUpdated) };
}
Run Code Online (Sandbox Code Playgroud)
但这很糟糕,因为它会进行Max()两次转换.有没有更好的方法来编写这段代码?
根据接受的答案,这是我提出的解决方案:
public virtual DateTime LastActivity
{
get
{
var max = Pictures.Any() ? Pictures.Max(x => x.LastUpdated) : DateTime.MinValue;
return max > this.LastUpdated ? max : this.LastUpdated;
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,如果你Max()对一个空集合进行处理,你会得到一个例外,所以你必须先检查集合中是否有任何东西.
只需将max存储在变量中,而不是执行两次计算.
public DateTime LastActivity
{
get
{
var max = Pictures.Max(x => x.LastUpdated);
return max > this.LastUpdated
? max
: this.LastUpdated
};
}
Run Code Online (Sandbox Code Playgroud)