IList CreateCollection(Object parent)
    {
        XPBaseCollection collection;

        if (parent == null)
        {
            collection = new XPCollection(session, root);
            XPMemberInfo parentMemberInfo = hdict.GetParentMember(root);
            if (parentMemberInfo != null)
            {
                collection.Criteria = new NullOperator(new OperandProperty(parentMemberInfo.Name));
            }
        }
        else
        {
            XPClassInfo  classInfo          = session.GetClassInfo(parent);
            XPMemberInfo childrenMemberInfo = hdict.GetChildrenMember(classInfo);
            if (childrenMemberInfo == null)
            {
                return(new object[0]);
            }
            collection = new XPCollection(session, childrenMemberInfo.CollectionElementType);
            XPMemberInfo parentMemberInfo = hdict.GetParentMember(childrenMemberInfo.CollectionElementType);
            System.Diagnostics.Debug.Assert(parentMemberInfo != null);
            collection.Criteria = new BinaryOperator(new OperandProperty(parentMemberInfo.Name), new OperandValue(parent), BinaryOperatorType.Equal);
        }
        /* without a sotring the order of objects might differ */
        collection.Sorting.Add(new SortProperty(root.KeyProperty.Name, DevExpress.Xpo.DB.SortingDirection.Ascending));
        return(collection);
    }