/// <summary> /// Gets Additional <see cref="Thing"/> related to the <see cref="ElementUsage"/> to copy /// </summary> /// <param name="transaction">The current transaction</param> /// <param name="partition">The current partition</param> /// <param name="securityContext">The security context</param> /// <param name="source">The current source that may contain <see cref="ElementUsage"/> to copy</param> /// <param name="readservice">The element-definition read service</param> /// <param name="allSourcesId">A list containing the identifier of all things to copy</param> /// <returns>A list containing additional <see cref="Thing"/> to copy</returns>guid private IReadOnlyList <Thing> GetElementDefinitionTreeFromRootDefinition(NpgsqlTransaction transaction, string partition, ISecurityContext securityContext, IReadOnlyList <Thing> source, IReadService readservice, IReadOnlyList <Guid> allSourcesId) { var additionalSources = new List <Thing>(); var usages = source.OfType <ElementUsage>().ToArray(); if (usages.Length > 0) { var getResults = readservice.GetDeep(transaction, partition, usages.Select(x => x.ElementDefinition).Distinct().Where(x => !allSourcesId.Contains(x)).ToArray(), securityContext).ToList(); additionalSources.AddRange(getResults); additionalSources.AddRange(this.GetElementDefinitionTreeFromRootDefinition(transaction, partition, securityContext, getResults, readservice, allSourcesId.Union(getResults.Select(x => x.Iid)).ToList())); } return(additionalSources); }