private void ExtractLeftResource(IIdentifiable leftResource, RelationshipProxy[] relationships, Dictionary <RelationshipProxy, List <IIdentifiable> > rightResourcesGrouped, Dictionary <RelationshipProxy, List <IIdentifiable> > leftResourcesGrouped) { foreach (var proxy in relationships) { var relationshipValue = proxy.GetValue(leftResource); // skip this relationship if it's not populated if (!proxy.IsContextRelation && relationshipValue == null) { continue; } if (!(relationshipValue is IEnumerable rightResources)) { // in the case of a to-one relationship, the assigned value // will not be a list. We therefore first wrap it in a list. var list = TypeHelper.CreateListFor(proxy.RightType); if (relationshipValue != null) { list.Add(relationshipValue); } rightResources = list; } var uniqueRightResources = UniqueInTree(rightResources.Cast <IIdentifiable>(), proxy.RightType); if (proxy.IsContextRelation || uniqueRightResources.Any()) { AddToRelationshipGroup(rightResourcesGrouped, proxy, uniqueRightResources); AddToRelationshipGroup(leftResourcesGrouped, proxy, leftResource.AsEnumerable()); } } }
private void ExtractLeftResource(IIdentifiable leftResource, IReadOnlyCollection <RelationshipProxy> relationships, Dictionary <RelationshipProxy, List <IIdentifiable> > rightResourcesGrouped, Dictionary <RelationshipProxy, List <IIdentifiable> > leftResourcesGrouped) { foreach (RelationshipProxy proxy in relationships) { object relationshipValue = proxy.GetValue(leftResource); // skip this relationship if it's not populated if (!proxy.IsContextRelation && relationshipValue == null) { continue; } ICollection <IIdentifiable> rightResources = CollectionConverter.ExtractResources(relationshipValue); ISet <IIdentifiable> uniqueRightResources = UniqueInTree(rightResources, proxy.RightType); if (proxy.IsContextRelation || uniqueRightResources.Any()) { AddToRelationshipGroup(rightResourcesGrouped, proxy, uniqueRightResources); AddToRelationshipGroup(leftResourcesGrouped, proxy, leftResource.AsEnumerable()); } } }