private ExcelTemplatePath(string rawPath)
 {
     if (!TemplateDescriptionHelper.IsCorrectModelPath(rawPath))
     {
         throw new ObjectPropertyExtractionException($"Invalid excel template path '{rawPath}'");
     }
     PartsWithIndexers       = rawPath.Split('.');
     PartsWithoutArrayAccess = PartsWithIndexers.Select(TemplateDescriptionHelper.GetArrayPathPartName).ToArray();
     RawPath                  = rawPath;
     HasArrayAccess           = PartsWithIndexers.Any(TemplateDescriptionHelper.IsArrayPathPart);
     HasPrimaryKeyArrayAccess = PartsWithIndexers.Any(TemplateDescriptionHelper.IsPrimaryArrayPathPart);
 }
        public (ExcelTemplatePath pathToEnumerable, ExcelTemplatePath relativePathToItem) SplitForEnumerableExpansion()
        {
            if (!HasArrayAccess)
            {
                throw new BaseExcelSerializationException($"Expression needs enumerable expansion but has no part with '[]' or '[#]' (path - '{RawPath}')");
            }
            var pathToEnumerableLength = PartsWithIndexers.TakeWhile(x => !TemplateDescriptionHelper.IsArrayPathPart(x)).Count() + 1;
            var pathToEnumerable       = new ExcelTemplatePath(string.Join(".", PartsWithIndexers.Take(pathToEnumerableLength)));
            var relativePathToItem     = new ExcelTemplatePath(string.Join(".", PartsWithIndexers.Skip(pathToEnumerableLength)));

            return(pathToEnumerable, relativePathToItem);
        }