While DicomObjects can not create a Dicom Hierarchical SOP Instance dataset collection directly, however it can do much of the work for you. A Hierarchical SOP Instance Dataset collection are similar in structure to a DicomDir which DicomObjects can create automatically.

Hierarchical SOP Instances are primarily used in the creation of Key Note Objects. The Structure of the Hierarchical SOP Instance is Study - Series - Instance (NO PATIENT)

The first Step is to organise all the objects of interest into a DicomDir by adding them to a DicomDataSet by using the AddToDirectory method.

 
    DicomDataSet PseudoDicomDir = new DicomDataSet();
    // Add all the Objects to the DicomDir
    PseudoDicomDir.AddToDirectory(ThisObject, "", "");

We Should now check that only a references to a single patient have been made, the top level of a DicomDir is patient level therefore

    // if more than one member to the Top Level, then we have more than one patient 
    if (PseudoDicomDir.Children.Count > 1)
      MessageBox.Show("ERROR - more than one patient ID");

We can now extract the information required from the DicomDir into DicomDataSetCollection that represents a Hierarchical SOP Instances and can be added to(0040,A375).

    
 DicomDataSetCollection StudySequence = new DicomDataSetCollection();
 // for each Study in the dicomdir (only one patient allowed)
 foreach (DicomDataSet study in PseudoDicomDir.Children[0].Children)
 {
    DicomDataSet StudySequenceItem = new DicomDataSet();
    StudySequence.Add(StudySequenceItem);
    StudySequenceItem.StudyUID = study.StudyUID; // Unique identifier of a Series that is part of this Study 
    DicomDataSetCollection SeriesSequence = new DicomDataSetCollection();
    foreach (DicomDataSet series in study.Children) // for each series in each study
    {
        DicomDataSet SeriesSequenceItem = new DicomDataSet();
        SeriesSequence.Add(SeriesSequenceItem);
        SeriesSequenceItem.SeriesUID = series.SeriesUID; // Referenced Series Instance UID
        DicomDataSetCollection InstanceSequence = new DicomDataSetCollection();
        foreach (DicomDataSet Instance in series.Children) // for each instance in each series
        {
            DicomDataSet InstanceSequenceItem = new DicomDataSet();
            InstanceSequence.Add(InstanceSequenceItem);
            // Referenced SOP Class UID
            InstanceSequenceItem.Add(Keyword.ReferencedSOPClassUID,
                     Instance.Value(Keyword.ReferencedSOPClassUIDInFile));
            // Referenced SOP Instance UID
            InstanceSequenceItem.Add(Keyword.ReferencedSOPInstanceUID,
                     Instance.Value(Keyword.ReferencedSOPInstanceUIDInFile));
        }
        // add all the instance collection to the series
        SeriesSequenceItem.Add(Keyword.ReferencedSOPSequence, InstanceSequence);
    }
    // add the series collection to the study
    StudySequenceItem.Add(Keyword.ReferencedSeriesSequence, SeriesSequence);
 }