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); }