DevExpress XAF: получить коллекцию подколлекций

У меня есть 3 класса: дедушка, человек, ребенок

public class GrandFother: BaseObject
{
[Association("GrandFother_Persons")]
//......
public XPCollection<Persons > GFChilds
{
   get
    {
        return GetCollection<Persons >("GFChilds");
    }
}
}

public class Persons: BaseObject
{
[Association("Persons_Childs")]
// Other code ...
public XPCollection<Child> Childs
{
   get
    {
        return GetCollection<Child>("Childs");
    }
}
//Other code ...
}

public class Child: BaseObject
{
[Association("Persons_Childs")]
// Code ...
}

Теперь я хочу, чтобы в классе GrandFother я хотел получить список всех детей, связанных с людьми, принадлежащими дедушке.

Например:

GrangFother1 has two Persons: Person1, Person2.  
Person1 has 2 childs: Per1Ch1, Per1Ch2.    
Person2 has 2 childs: Per2Ch1, Per2Ch2

И так, добавить XPCollection<Child> к дедушке класса, который будет содержать: Per1Ch1, Per1Ch2, Per2Ch1, Per2Ch2 и, если возможно, с возможностью сортировки.

Благодарю.

1 ответ

Решение

Вы можете использовать [NonPersistent] коллекционная собственность.

[NonPersistent]
public XPCollection<Child> GrandChildren
{
    get
    {
        var result = new XPCollection<Child>(Session, GFChilds.SelectMany(x => x.Childs));

        // sorting
        SortingCollection sortCollection = new SortingCollection();
        sortCollection.Add(new SortProperty("Name", SortingDirection.Ascending));
        xpCollectionPerson.Sorting = sortCollection;

        return result;
    }
}

Но вам может не понадобиться XPCollection<Child> - ан IList<Child> будет часто делать.

[NonPersistent]
public IList<Child> GrandChildren
{
    get
    {
        return GFChilds
                  .SelectMany(x => x.Childs)
                  .OrderBy(x => x.Name);
    }
}
Другие вопросы по тегам