示例#1
0
        public static AggregationContainerDescriptor <T> CardinalityBy <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter, Expression <Func <T, bool> > filterRule = null) where T : class
        {
            var aggName = fieldGetter.GetAggName(AggType.Cardinality);

            if (filterRule == null)
            {
                return(agg.Cardinality(aggName, x => x.Field(fieldGetter)));
            }

            var filterName = filterRule.GenerateFilterName();

            agg.Filter(filterName,
                       f =>
                       f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>())
                       .Aggregations(innerAgg => innerAgg.Cardinality(aggName, field => field.Field(fieldGetter))));

            return(agg);
        }