public static HierarchicalFacet HierarchicalFacetFor <TResult>(this IHasFacetResults <TResult> facetsResultsContainer, Expression <Func <TResult, Hierarchy> > fieldSelector) { fieldSelector.ValidateNotNullArgument("fieldSelector"); var facetName = fieldSelector.GetFieldPath(); var facet = facetsResultsContainer.Facets[facetName] as TermsFacet; var resultFacet = new HierarchicalFacet(); foreach (var termCount in facet) { if (!termCount.Term.Contains('/')) { // create top path resultFacet.Add(new HierarchyPath { Path = termCount.Term, Count = termCount.Count }); } else { // traversing paths var sections = termCount.Term.Split('/'); var hierarchyPath = resultFacet.Where(x => x.Path.Equals(sections[0])).Single(); for (int i = 2; i < sections.Length; i++) { hierarchyPath = hierarchyPath.Where(x => x.Path.Equals(string.Join("/", sections.Take(i)))).Single(); } hierarchyPath.Add(new HierarchyPath { Path = termCount.Term, Count = termCount.Count }); } } return(resultFacet); }
void IShouldGetAHierarchicalFacet() { facet = result.HierarchicalFacetFor(x => x.Hierarchy); facet.Should().NotBeEmpty(); }