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 ...
///