We used to be able to build filters incrementally as below. How do we do it in the new API. Thanks
internal static List<Func<QueryContainerDescriptor, QueryContainer>> BuildFilter(SearchCriteria searchCriteria, string countryCurrency, float? countryCurrencyRate, float? searchCurrencyRate, out int qparams)
{
var filters = new List<Func<QueryContainerDescriptor, QueryContainer>>();
//PromoterId
if (searchCriteria.spPromoterId.HasValue) // the other conditions are covered above in cmc
filters.Add(fq => fq.Term(t => t.Field(f => f.PromoterId).Value(searchCriteria.spPromoterId.Value)));
//Bedrooms
if (searchCriteria.spBedrooms.HasValue)
{
filters.Add(fq => fq.Term(t => t.Field(f => f.Bedrooms).Value(searchCriteria.spBedrooms.Value)));
//filter = filter + " and (Bedrooms eq " + searchCriteria.spBedrooms.Value + ")";
qparams = qparams + (int)Qparams.beds;
}
if (searchCriteria.spDetached != null && searchCriteria.spDetached.Length < 3) //i,e, if 3 then no filter it means all
{
qparams = qparams + (int)Qparams.standing;
filters.Add(fq => fq.Terms(t => t.Field(f => f.Standing).Terms(searchCriteria.spDetached)));
}
//tenure
if (searchCriteria.spTenure.HasValue /*&& searchCriteria.spSuitable.Value != 1*/) //1 = include
{
if (searchCriteria.spTenure == 0) //Freehold
filters.Add(fq => fq.Term(t => t.Field(f => f.Tenure).Value(1/*searchCriteria.spSaleType.Value*/)));
else if (searchCriteria.spTenure == 2) //Leasehold
filters.Add(fq => fq.Term(t => t.Field(f => f.Tenure).Value(2/*searchCriteria.spSaleType.Value*/)));
}