diff --git a/Providers/XBaseFileProvider.cs b/Providers/XBaseFileProvider.cs index e60ea71..6cb8ec1 100644 --- a/Providers/XBaseFileProvider.cs +++ b/Providers/XBaseFileProvider.cs @@ -369,6 +369,40 @@ namespace xFileService.Providers return await Task.FromResult(result); } + /// + /// Extract all Referencing Models for Specified Key ... + /// + /// + /// + public async Task>> GetAllReferencings(TKey providedForId) + { + // + // Validate ... + var isValid = + !providedForId.IsNull(); + if (!isValid) + { + XException.InvalidArgs.Throw(); + } + + // + var identifier = GetProvidedID(providedForId); + + // + var result = FileProvider.FileRepository + .AsQueryable() + .Where(te => te.References.Contains(identifier)) + .Select(te => te.References) + .SelectMany(tr => tr.ParseXReferenceList()) + .Where(tr => tr.ProvidedFor == Provider && $"{tr.ReferencedTo}" == $"{providedForId}") + .OrderBy(tr => tr.Index) + .AsEnumerable() + ; + + // + return await Task.FromResult(result); + } + /// /// Count References ... /// @@ -766,6 +800,38 @@ namespace xFileService.Providers return result; } + private async Task> GetReferencingIndexes(TKey providedForId) + { + // + // Validate ... + var isValid = + !providedForId.IsNull(); + if (!isValid) + { + XException.InvalidArgs.Throw(); + } + + // + var result = new List(); + var referencings = await GetAllReferencings(providedForId); + isValid = !referencings.IsNull() && + referencings.HasChild(); + if (!isValid) + { + return result; + } + + // + result = + referencings + .OrderBy(r => r.Index) + .Select(r => r.Index) + .ToList(); + + // + return result; + } + /// /// Check Specified Dto is Has Reference to Provider ... ///