示例#1
0
        /// <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;
        }