public static AggregationContainerDescriptor <T> CountBy <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter, Expression <Func <T, bool> > filterRule = null) where T : class { var aggName = fieldGetter.GetAggName(AggType.Count); if (filterRule == null) { return(agg.ValueCount(aggName, x => x.Field(fieldGetter))); } var filterName = filterRule.GenerateFilterName(); agg.Filter(filterName, f => f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>()) .Aggregations(innerAgg => innerAgg.ValueCount(aggName, field => field.Field(fieldGetter)))); return(agg); }