/// <summary> /// Produces the Linq expression representing the entire filter descriptors collection. /// </summary> /// <param name="filterDescriptors">Collection of filters</param> /// <param name="filterOperator">The operator used to combine filters</param> /// <param name="expressionCache">Cache for storing built expressions</param> /// <returns>Produced linq expression, which can be <c>null</c> if there are no filter descriptors.</returns> public static Expression BuildFiltersExpression( FilterDescriptorCollection filterDescriptors, FilterDescriptorLogicalOperator filterOperator, ExpressionCache expressionCache) { Debug.Assert(filterDescriptors != null, "Unexpected null filterDescriptors"); Expression filtersExpression = null; foreach (FilterDescriptor filterDescriptor in filterDescriptors) { // Ignored filters will not have a cache entry if (expressionCache.ContainsKey(filterDescriptor)) { Expression filterExpression = expressionCache[filterDescriptor]; if (filtersExpression == null) { filtersExpression = filterExpression; } else if (filterOperator == FilterDescriptorLogicalOperator.And) { filtersExpression = Expression.AndAlso(filtersExpression, filterExpression); } else { filtersExpression = Expression.OrElse(filtersExpression, filterExpression); } } } return(filtersExpression); }
/// <summary> /// Produces the Linq expression representing the entire filter descriptors collection. /// </summary> /// <param name="filterDescriptors">Collection of filters</param> /// <param name="filterOperator">The operator used to combine filters</param> /// <param name="expressionCache">Cache for storing built expressions</param> /// <returns>Produced linq expression, which can be <c>null</c> if there are no filter descriptors.</returns> public static Expression BuildFiltersExpression( FilterDescriptorCollection filterDescriptors, FilterDescriptorLogicalOperator filterOperator, ExpressionCache expressionCache) { Debug.Assert(filterDescriptors != null, "Unexpected null filterDescriptors"); Expression filtersExpression = null; foreach (FilterDescriptor filterDescriptor in filterDescriptors) { // Ignored filters will not have a cache entry if (expressionCache.ContainsKey(filterDescriptor)) { Expression filterExpression = expressionCache[filterDescriptor]; if (filtersExpression == null) { filtersExpression = filterExpression; } else if (filterOperator == FilterDescriptorLogicalOperator.And) { filtersExpression = Expression.AndAlso(filtersExpression, filterExpression); } else { filtersExpression = Expression.OrElse(filtersExpression, filterExpression); } } } return filtersExpression; }