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); }
public IEnumerable <IDerivedEntity> AttachEntities(ResultSerialData resultSerialData) { var entityTypeName = resultSerialData.EntityTypeName; var derivedEntityList = this.TraverseResults(entityTypeName, resultSerialData.Items); this.AttachRelatedItems(resultSerialData.RelatedItems); return(derivedEntityList); }
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; } }
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); }
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; } } } }