/// <summary>Applies the filter.</summary>
        /// <param name="baseExpression">The base expression.</param>
        /// <param name="fullName">Name of the full.</param>
        /// <returns>A DbExpression.</returns>
        public DbExpression ApplyFilter(DbExpression baseExpression, string fullName)
        {
            if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName))
            {
                var filters = InstanceFilterContext.GetGlobalApplicableFilter(fullName);
                var type    = InstanceFilterContext.TypeByEntitySetBase[fullName];

                if (filters.Count > 0)
                {
                    foreach (var filter in filters)
                    {
                        var filterQueryEnabled = FilterQuery.IsEnabled(filter);
                        if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) ||
                            (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type)))
                        {
                            continue;
                        }

                        var expression2 = filter.GetDbExpression(Context, type);

                        if (expression2 != null)
                        {
                            var baseExpressionProperty = baseExpression as DbPropertyExpression;
                            NavigationProperty navProp = null;

                            if (baseExpressionProperty != null)
                            {
                                navProp = baseExpressionProperty.Property as NavigationProperty;
                            }

                            if (QueryFilterManager.AllowPropertyFilter && navProp != null && !baseExpression.ResultType.ToString().Contains("Transient.collection["))
                            {
                                // Filter property
                                expression2 = DbExpressionBuilder.Take(expression2, 1);
                                expression2 = DbExpressionBuilder.Element(expression2);

                                baseExpression = expression2;
                            }
                            else
                            {
                                var visitor = new QueryFilterInterceptorDbProjectExpression();
                                visitor.DbScanExpression    = baseExpression;
                                visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2];

                                var filetered = expression2.Accept(visitor);

                                baseExpression = filetered;
                            }
                        }
                    }
                }
            }
            if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName))
            {
                var filters = InstanceFilterContext.GetApplicableFilter(fullName);
                var type    = InstanceFilterContext.TypeByEntitySetBase[fullName];

                if (filters.Count > 0)
                {
                    foreach (var filter in filters)
                    {
                        var filterQueryEnabled = FilterQuery.IsEnabled(filter);
                        if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) ||
                            (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type)))
                        {
                            continue;
                        }

                        var expression2 = filter.GetDbExpression(Context, type);

                        if (expression2 != null)
                        {
                            var baseExpressionProperty = baseExpression as DbPropertyExpression;
                            NavigationProperty navProp = null;

                            if (baseExpressionProperty != null)
                            {
                                navProp = baseExpressionProperty.Property as NavigationProperty;
                            }

                            if (QueryFilterManager.AllowPropertyFilter && navProp != null && !baseExpression.ResultType.ToString().Contains("Transient.collection["))
                            {
                                // Filter property
                                expression2 = DbExpressionBuilder.Take(expression2, 1);
                                expression2 = DbExpressionBuilder.Element(expression2);

                                baseExpression = expression2;
                            }
                            else
                            {
                                var visitor = new QueryFilterInterceptorDbProjectExpression();
                                visitor.DbScanExpression    = baseExpression;
                                visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2];

                                var filetered = expression2.Accept(visitor);

                                baseExpression = filetered;
                            }
                        }
                    }
                }
            }

            return(baseExpression);
        }
        /// <summary>Applies the filter.</summary>
        /// <param name="baseExpression">The base expression.</param>
        /// <param name="fullName">Name of the full.</param>
        /// <returns>A DbExpression.</returns>
        public DbExpression ApplyFilter(DbExpression baseExpression, string fullName)
        {
            if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName))
            {
                var filters = InstanceFilterContext.GetGlobalApplicableFilter(fullName);
                var type    = InstanceFilterContext.TypeByEntitySetBase[fullName];

                if (filters.Count > 0)
                {
                    foreach (var filter in filters)
                    {
                        var filterQueryEnabled = FilterQuery.IsEnabled(filter);
                        if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) ||
                            (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type)))
                        {
                            continue;
                        }

                        var expression2 = filter.GetDbExpression(Context, type);

                        if (expression2 != null)
                        {
                            var visitor = new QueryFilterInterceptorDbProjectExpression();
                            visitor.DbScanExpression = baseExpression;
                            var filetered = expression2.Accept(visitor);
                            baseExpression = filetered;
                        }
                    }
                }
            }
            if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName))
            {
                var filters = InstanceFilterContext.GetApplicableFilter(fullName);
                var type    = InstanceFilterContext.TypeByEntitySetBase[fullName];

                if (filters.Count > 0)
                {
                    foreach (var filter in filters)
                    {
                        var filterQueryEnabled = FilterQuery.IsEnabled(filter);
                        if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) ||
                            (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type)))
                        {
                            continue;
                        }

                        var expression2 = filter.GetDbExpression(Context, type);

                        if (expression2 != null)
                        {
                            var visitor = new QueryFilterInterceptorDbProjectExpression();
                            visitor.DbScanExpression    = baseExpression;
                            visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2];

                            var filetered = expression2.Accept(visitor);

                            baseExpression = filetered;
                        }
                    }
                }
            }

            return(baseExpression);
        }