Exemplo n.º 1
0
 public static void FillResultRelatedItems(string entityTypeName, ResultSerialData resultSerialData, string[] expand, DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     if (expand != null && expand.Length > 0 && resultSerialData.Items != null && resultSerialData.Items.Count() > 0)
     {
         var splitExpand = DataUtils.SplitExpand(expand, (el) => el);
         foreach (var branch in DataUtils.NavigationBranch(splitExpand))
         {
             var navs               = DataUtils.BranchToNavigation(entityTypeName, branch, metadataSrv);
             var lastNav            = navs[navs.Count - 1];
             var rootEntityTypeName = string.Empty;
             IEnumerable <Dto> rootItems;
             if (branch.Length == 1)
             {
                 rootEntityTypeName = entityTypeName;
                 rootItems          = resultSerialData.Items;
             }
             else
             {
                 rootEntityTypeName = navs[navs.Count - 2].EntityTypeName;
                 rootItems          = resultSerialData.RelatedItems[rootEntityTypeName];
             }
             var navigationPropertyName = branch[branch.Length - 1];
             var entityTypeNameLocal    = lastNav.EntityTypeName;
             var relatedEntityItems     = dataContext.GetRelatedEntities(rootEntityTypeName, rootItems, navigationPropertyName).ToList();
             if (resultSerialData.RelatedItems == null)
             {
                 resultSerialData.RelatedItems = new Dictionary <string, IEnumerable <Dto> >();
             }
             if (!resultSerialData.RelatedItems.ContainsKey(entityTypeNameLocal))
             {
                 resultSerialData.RelatedItems[entityTypeNameLocal] = relatedEntityItems.Select(it => it.entity.dto);
             }
             else
             {
                 var items = resultSerialData.RelatedItems[entityTypeNameLocal].ToList();
                 PushMultiIfNotThere(relatedEntityItems, items);
                 resultSerialData.RelatedItems[entityTypeNameLocal] = items;
             }
         }
     }
 }