Beispiel #1
0
        public ResultSerialData GetMultipleItems(IEnumerable <Dto> partialDtos, string[] expand)
        {
            var resultSerialData = new ResultSerialData()
            {
                Items          = null,
                EntityTypeName = this.entityTypeName,
                TotalCount     = 0,
                RelatedItems   = { }
            };
            var derivedEntity = default(T);

            if (this.dataContext.entitySets.ContainsKey(this.entityTypeName))
            {
                var dtos      = new List <Dto>();
                var entitySet = (EntitySet <T>) this.dataContext.entitySets[this.entityTypeName];
                foreach (var partialDto in partialDtos)
                {
                    derivedEntity = entitySet.FindByKey(partialDto);
                    if (derivedEntity != null)
                    {
                        dtos.Add(derivedEntity.entity.dto);
                    }
                }
                resultSerialData.Items = dtos;
                DataViewLocalDtoUtils.FillResultRelatedItems(this.entityTypeName, resultSerialData, expand, this.dataContext, this.metadataSrv);
            }
            return(resultSerialData);
        }
Beispiel #2
0
        public IEnumerable <IDerivedEntity> AttachEntities(ResultSerialData resultSerialData)
        {
            var entityTypeName    = resultSerialData.EntityTypeName;
            var derivedEntityList = this.TraverseResults(entityTypeName, resultSerialData.Items);

            this.AttachRelatedItems(resultSerialData.RelatedItems);
            return(derivedEntityList);
        }
Beispiel #3
0
 public static void FillResultSingleRelatedItems(string entityTypeName, ResultSingleSerialData resultSingleSerialData, string[] expand, DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     if (resultSingleSerialData.Item != null)
     {
         var resultSerialData = new ResultSerialData()
         {
             Items = new List <Dto>()
             {
                 resultSingleSerialData.Item
             },
             EntityTypeName = entityTypeName,
             TotalCount     = 0,
             RelatedItems   = { }
         };
         FillResultRelatedItems(entityTypeName, resultSerialData, expand, dataContext, metadataSrv);
         resultSingleSerialData.RelatedItems = resultSerialData.RelatedItems;
     }
 }
Beispiel #4
0
        public ResultSerialData GetItems(Func <T, bool> predicate, string[] expand)
        {
            var resultSerialData = new ResultSerialData()
            {
                Items          = { },
                EntityTypeName = this.entityTypeName,
                TotalCount     = 0,
                RelatedItems   = { }
            };

            if (this.dataContext.entitySets.ContainsKey(this.entityTypeName))
            {
                var entitySet         = (EntitySet <T>) this.dataContext.entitySets[this.entityTypeName];
                var derivedEntityList = entitySet.Filter(predicate);
                resultSerialData.Items = derivedEntityList.Select((it) => it.entity.dto).ToList();
                DataViewLocalDtoUtils.FillResultRelatedItems(this.entityTypeName, resultSerialData, expand, this.dataContext, this.metadataSrv);
            }
            return(resultSerialData);
        }
Beispiel #5
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;
             }
         }
     }
 }