public static Expression <Func <T, bool> > BuildFiltersExp(MetadataBase metadata, FilterBase initialFilter, List <LogicalFilter> logicalFilters) { if (metadata == null) { throw new ArgumentNullException(nameof(metadata)); } if (initialFilter == null) { throw new ArgumentNullException(nameof(initialFilter)); } ParameterExpression paramExp = Expression.Parameter(typeof(T), "parameter"); Expression exp = initialFilter.GetExpression(paramExp, metadata); if (logicalFilters != null) { foreach (LogicalFilter logicalFilter in logicalFilters) { exp = logicalFilter.GetExpression(exp, paramExp, metadata); } } var predicate = Expression.Lambda <Func <T, bool> >(exp, paramExp); return(predicate); }