private List<string> GetQueryElements(Context lastCheckedContext, Context contextToCheck)
{//Items -> ItemsTitle
var resultList = new List<string>();
var lastCheckedElements = lastCheckedContext?.FullPath.Split('.') ?? new string[0];
var pathToCheckElements = contextToCheck.FullPath.Split('.');
List<string> relevantElements = new List<string>();
List<string> prefixElements = new List<string>();
if (lastCheckedElements.Any())
{
int i = 0;
for (i = 0; i < Math.Min(lastCheckedElements.Length, pathToCheckElements.Length); i++)
{
if (lastCheckedElements[i].Equals(pathToCheckElements[i]))
prefixElements.Add(lastCheckedElements[i]);
else
break;
}
if (pathToCheckElements.Length > i)
relevantElements.AddRange(pathToCheckElements.Skip(i));
}
else
relevantElements = pathToCheckElements.ToList();
string prefix = prefixElements.Any() ? string.Join(".", prefixElements) + ".": string.Empty;
for (int i = 1; i <= relevantElements.Count; i++)
{//then join them back together with the prefix
resultList.Add(string.Concat(prefix, string.Join(".", relevantElements.Take(i).ToArray())));
}
return resultList;
}