public override void OnActionExecuted(ActionExecutedContext context)
        {
            var qs        = QueryFns.ExtractAndDecodeQueryString(context);
            var queryable = QueryFns.ExtractQueryable(context);

            if (!EntityQuery.NeedsExecution(qs, queryable))
            {
                base.OnActionExecuted(context);
                return;
            }

            var eq      = new EntityQuery(qs);
            var eleType = TypeFns.GetElementType(queryable.GetType());

            eq.Validate(eleType);


            int?inlineCount = null;

            var originalQueryable = queryable;

            queryable = eq.ApplyWhere(queryable, eleType);

            if (eq.IsInlineCountEnabled)
            {
                inlineCount = (int)Queryable.Count((dynamic)queryable);
            }


            queryable = EntityQuery.ApplyCustomLogic(eq, queryable, eleType);
            queryable = eq.ApplyOrderBy(queryable, eleType);
            queryable = eq.ApplySkip(queryable, eleType);
            queryable = eq.ApplyTake(queryable, eleType);
            queryable = eq.ApplySelect(queryable, eleType);
            queryable = EntityQuery.ApplyExpand(eq, queryable, eleType);


            if (queryable != originalQueryable)
            {
                // if a select or expand was encountered we need to
                // execute the DbQueries here, so that any exceptions thrown can be properly returned.
                // if we wait to have the query executed within the serializer, some exceptions will not
                // serialize properly.
                var listResult = Enumerable.ToList((dynamic)queryable);
                listResult = EntityQuery.AfterExecution(eq, queryable, listResult);

                var qr = new QueryResult(listResult, inlineCount);
                context.Result = new ObjectResult(qr);
            }

            base.OnActionExecuted(context);
        }