Начиная с PHP 5.5, вы можете использовать array_column
, чтобы получить массив значений для конкретного ключа, и максимально его.
max(array_column($array, 'Total'))
Я делаю это так, за исключением того, что я не использую свойство для частного списка
private IList<Child> _children
public IEnumerable<Child> Children
{
get
{
return children;
}
}
Это вообще не проблема NHibernate.
Вы должны реализовать метод AddChild. Классы отвечают за их согласованность, поэтому они не должны открывать ничего, что не должно быть доступно. Например, (изменяемый) список детей должен быть скрыт. Предоставление IEnumerable - хорошая идея.
Ваш второй код - хорошая отправная точка. Возможно, вам понадобится еще несколько методов, например RemoveChild или CoundChildren.
Я делаю это так:
public class Parent
{
private ISet<Child> _children = new HashedSet<Child>();
public ReadOnlyCollection<Child> Children
{
get{ return new List(_children).AsReadOnly(); }
}
public void AddChild( Child c )
{
if( c != null && !_children.Contains (d) )
{
c.Parent = this;
_children.Add (c);
}
}
}
Так что, собственно говоря, Стефан тоже немного об этом говорит. Я просто предоставляю копию списка Children только для чтения, чтобы вы могли легко перебирать дочерние элементы родителя и получать количество дочерних элементов, которые есть у родителя. Добавление и удаление дочерних элементов к родительскому элементу должно выполняться с использованием методов-членов AddChild и RemoveChild.
Мне не нравятся все дополнительные методы AddXXX ()
и RemoveXXX ()
, загромождающие интерфейсы моих сущностей. Вместо этого у меня есть собственный список, который вызывает события при вызове методов Add ()
и Remove ()
.
Затем связывание происходит в обработчиках событий:
public class Course()
{
public Course()
{
this.Topics = new EntityList<Topic>();
this.Topics.AddItem += new AddItemEventHandler<Topic>(Topic_AddItem);
this.Topics.RemoveItem += new RemoveItemEventHandler<Topic>(Topic_RemoveItem);
}
public EntityList<Topic> Topics { get; private set; }
private void Topic_AddItem(Topic item, object args)
{
// Replace with your linking code:
EntityLinker.Link(this).With(item, args);
}
private void Topic_RemoveItem(Topic item, object args)
{
// Replace with your unlinking code:
EntityLinker.Unlink(this).From(item, args);
}
}