Допустим, у меня есть сущность, которая выглядит следующим образом:
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); }
}
Однако я также хочу рассмотреть свойство LastUpdated
для сущности Album
.Я мог бы использовать этот код:
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()
для пустой коллекции, вы получите исключение, поэтому вам нужно сначала проверить, есть ли что-нибудь в коллекции.