Example #1
0
        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)));
        }