public static void GetTraverseAssociationsResultFromUpwardTraversalWithDepthLimit(UtilityNetwork utilityNetwork, IReadOnlyList<Element> startingElements)
{
// List of fields whose values will be fetched as name-values pairs during association traversal operation
List<string> additionalFieldsToFetch = new List<string> { "ObjectId", "AssetName", "AssetGroup", "AssetType" };
// Set downward traversal with maximum depth level of 3
TraverseAssociationsDescription traverseAssociationsDescription = new TraverseAssociationsDescription(TraversalDirection.Ascending, 3) { AdditionalFields = additionalFieldsToFetch };
// Get traverse associations result from the staring element up to depth level 3
TraverseAssociationsResult traverseAssociationsResult = utilityNetwork.TraverseAssociations(startingElements, traverseAssociationsDescription);
// List of associations participated in traversal
IReadOnlyList<Association> associations = traverseAssociationsResult.Associations;
// KeyValue mapping between involved elements and their field name-values
IReadOnlyDictionary<Element, IReadOnlyList<AssociationElementFieldValue>> associationElementValuePairs = traverseAssociationsResult.AdditionalFieldValues;
foreach (KeyValuePair<Element, IReadOnlyList<AssociationElementFieldValue>> keyValuePair in associationElementValuePairs)
{
// Element
Element element = keyValuePair.Key;
// List of field names and their values
IReadOnlyList<AssociationElementFieldValue> elementFieldValues = keyValuePair.Value;
}
}