/// <summary> /// Handle $expand /// </summary> /// <param name="entry">Entry</param> /// <param name="edmParent">Parent EntitySet</param> /// <param name="targetVersion">Target Version</param> /// <param name="expandedNavigationItems">Expand Items</param> /// <param name="parentId">Parent Id</param> private void GenerateDeltaItemsFromExpand(object entry, IEdmNavigationSource edmParent, ODataVersion targetVersion, IEnumerable <ExpandedNavigationSelectItem> expandedNavigationItems, string parentId) { foreach (var navigationProperty in ((IEdmEntityType)EdmClrTypeUtils.GetEdmType(this.DataSource.Model, entry)).NavigationProperties()) { var expandedNavigationItem = GetExpandedNavigationItem(expandedNavigationItems, navigationProperty.Name); if (expandedNavigationItem != null) { bool isCollection = navigationProperty.Type.IsCollection(); ExpandSelectItemHandler expandItemHandler = new ExpandSelectItemHandler(entry); expandedNavigationItem.HandleWith(expandItemHandler); var propertyValue = expandItemHandler.ExpandedChildElement; if (propertyValue != null) { IEdmNavigationSource targetSource = edmParent.FindNavigationTarget(navigationProperty); if (isCollection) { var expandedEntities = propertyValue as IEnumerable; foreach (var expandedEntity in expandedEntities) { GenerateDeltaItemFromEntry(expandedEntity, targetSource, targetVersion, expandedNavigationItem.SelectAndExpand, parentId, navigationProperty.Name); } } else { GenerateDeltaItemFromEntry(propertyValue, targetSource, targetVersion, expandedNavigationItem.SelectAndExpand, parentId, navigationProperty.Name); } } // Handle deleted entry and link here GenerateDeltaItemsFromDeletedEntities(parentId, navigationProperty.Name); } } }
/// <summary> /// Handle $expand /// </summary> /// <param name="entry">Entry</param> /// <param name="edmParent">Parent EntitySet</param> /// <param name="targetVersion">Target Version</param> /// <param name="expandedNavigationItems">Expand Items</param> /// <param name="parentId">Parent Id</param> private void GenerateDeltaItemsFromExpand(object entry, IEdmNavigationSource edmParent, ODataVersion targetVersion, IEnumerable<ExpandedNavigationSelectItem> expandedNavigationItems, string parentId) { foreach (var navigationProperty in ((IEdmEntityType)EdmClrTypeUtils.GetEdmType(this.DataSource.Model, entry)).NavigationProperties()) { var expandedNavigationItem = GetExpandedNavigationItem(expandedNavigationItems, navigationProperty.Name); if (expandedNavigationItem != null) { bool isCollection = navigationProperty.Type.IsCollection(); ExpandSelectItemHandler expandItemHandler = new ExpandSelectItemHandler(entry); expandedNavigationItem.HandleWith(expandItemHandler); var propertyValue = expandItemHandler.ExpandedChildElement; if (propertyValue != null) { IEdmNavigationSource targetSource = edmParent.FindNavigationTarget(navigationProperty); if (isCollection) { var expandedEntities = propertyValue as IEnumerable; foreach (var expandedEntity in expandedEntities) { GenerateDeltaItemFromEntry(expandedEntity, targetSource, targetVersion, expandedNavigationItem.SelectAndExpand, parentId, navigationProperty.Name); } } else { GenerateDeltaItemFromEntry(propertyValue, targetSource, targetVersion, expandedNavigationItem.SelectAndExpand, parentId, navigationProperty.Name); } } // Handle deleted entry and link here GenerateDeltaItemsFromDeletedEntities(parentId, navigationProperty.Name); } } }