示例#1
0
        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());
                }
            }
        }
示例#2
0
        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());
                }
            }
        }