Nest to the new API

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*/)));

}