/// <summary>Constructor.</summary>
        /// <param name="dbSetProperty">The database set property.</param>
        public QueryFilterSet(DbContext context, PropertyInfo dbSetProperty)
        {
            // NOT longer used?
            // CreateFilterQueryableCompiled = new Lazy<Func<DbContext, QueryFilterSet, object, IQueryable>>(CompileCreateFilterQueryable);
            DbSetProperty    = dbSetProperty;
            ElementType      = dbSetProperty.PropertyType.GetDbSetElementType();
            GetDbSetCompiled = new Lazy <Func <DbContext, IQueryable> >(() => CompileGetDbSet(dbSetProperty));

            // UpdateInternalQueryCompiled
            {
                Action <DbContext, ObjectQuery> compiled;
                if (!CachedActions.TryGetValue(dbSetProperty, out compiled))
                {
                    compiled = CompileUpdateInternalQuery(dbSetProperty);
                    CachedActions.TryAdd(dbSetProperty, compiled);
                }
                UpdateInternalQueryCompiled = compiled;
            }

            {
                var currentQuery = dbSetProperty.GetValue(context, null);
                currentQuery  = QueryFilterManager.HookFilter2((IQueryable)currentQuery, ElementType, QueryFilterManager.PrefixFilterID);
                OriginalQuery = (IQueryable)currentQuery;
            }
        }
        public void UpdateHook(DbContext context)
        {
            var filterID = QueryFilterManager.PrefixFilterID + GetFilterUniqueID();

            // Hook on every set
            foreach (var set in FilterSets)
            {
                var currentQuery = set.OriginalQuery;

                var newQuery = QueryFilterManager.HookFilter2((IQueryable)currentQuery, set.ElementType, filterID);

                set.UpdateInternalQueryCompiled(Context, newQuery.GetObjectQuery());
            }
        }
        /// <summary>Constructor.</summary>
        /// <param name="dbSetProperty">The database set property.</param>
        public QueryFilterSet(DbContext context, PropertyInfo dbSetProperty)
        {
            CreateFilterQueryableCompiled = new Lazy <Func <DbContext, QueryFilterSet, object, IQueryable> >(CompileCreateFilterQueryable);
            DbSetProperty               = dbSetProperty;
            ElementType                 = dbSetProperty.PropertyType.GetDbSetElementType();
            GetDbSetCompiled            = new Lazy <Func <DbContext, IQueryable> >(() => CompileGetDbSet(dbSetProperty));
            UpdateInternalQueryCompiled = new Lazy <Action <DbContext, ObjectQuery> >(() => CompileUpdateInternalQuery(dbSetProperty));

            {
                var currentQuery = dbSetProperty.GetValue(context, null);
                currentQuery  = QueryFilterManager.HookFilter2((IQueryable)currentQuery, ElementType, QueryFilterManager.PrefixFilterID);
                OriginalQuery = (IQueryable)currentQuery;
            }
        }