private TResult ApplyScalarMethods <TResult, TDocument>(ElasticSearchQuery query, ElasticSearchResults <TDocument> processedResults) { object scalarResult; var method = query.Methods.First(); switch (method.MethodType) { case QueryMethodType.All: scalarResult = true; break; case QueryMethodType.Any: scalarResult = processedResults.Any(); break; case QueryMethodType.Count: scalarResult = processedResults.Count(); break; case QueryMethodType.ElementAt: if (!((ElementAtMethod)method).AllowDefaultValue) { scalarResult = processedResults.ElementAt(((ElementAtMethod)method).Index); } else { scalarResult = processedResults.ElementAtOrDefault(((ElementAtMethod)method).Index); } break; case QueryMethodType.First: if (!((FirstMethod)method).AllowDefaultValue) { scalarResult = processedResults.First(); } else { scalarResult = processedResults.FirstOrDefault(); } break; case QueryMethodType.Last: if (!((LastMethod)method).AllowDefaultValue) { scalarResult = processedResults.Last(); } else { scalarResult = processedResults.LastOrDefault(); } break; case QueryMethodType.Single: if (!((SingleMethod)method).AllowDefaultValue) { scalarResult = processedResults.Single(); } else { scalarResult = processedResults.SingleOrDefault(); } break; case QueryMethodType.GetResults: { var searchHits = processedResults.GetSearchHits(); var results2 = FormatFacetResults(processedResults.GetFacets(), query.FacetQueries); scalarResult = Activator.CreateInstance(typeof(TResult), new object[] { searchHits, processedResults.NumberFound, results2 }); break; } case QueryMethodType.GetFacets: scalarResult = FormatFacetResults(processedResults.GetFacets(), query.FacetQueries); break; default: throw new InvalidOperationException("Invalid query method"); } return((TResult)System.Convert.ChangeType(scalarResult, typeof(TResult))); }