public IEnumerable <T> FindPaged <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) where T : IConfigurable, new()
        {
            Type requestIndexEntryType = RequestIndexEntryProvider.ValidateQueryFilter <T>(filter);
            IEnumerable <IRequestIndexEntry> enumerable = RequestIndexEntryProvider.Handle <IEnumerable <IRequestIndexEntry> >(requestIndexEntryType, (IRequestIndexEntryHandler handler) => handler.FindPaged(this, filter, rootId, deepSearch, sortBy, pageSize));

            if (enumerable == null)
            {
                return(Array <T> .Empty);
            }
            if (typeof(T).IsSubclassOf(typeof(RequestBase)))
            {
                return(enumerable.Select(new Func <IRequestIndexEntry, T>(RequestIndexEntryProvider.CreateRequest <T>)));
            }
            if (enumerable is IEnumerable <T> )
            {
                return((IEnumerable <T>)enumerable);
            }
            MrsTracer.Common.Warning("IndexId not supported by this provider.", new object[0]);
            return(Array <T> .Empty);
        }
        public IConfigurable[] Find <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy) where T : IConfigurable, new()
        {
            Type requestIndexEntryType = RequestIndexEntryProvider.ValidateQueryFilter <T>(filter);

            IRequestIndexEntry[] array = RequestIndexEntryProvider.Handle <IRequestIndexEntry[]>(requestIndexEntryType, (IRequestIndexEntryHandler handler) => handler.Find(this, filter, rootId, deepSearch, sortBy));
            if (array == null)
            {
                return(Array <IConfigurable> .Empty);
            }
            Type typeFromHandle = typeof(T);

            if (array.GetType().GetElementType() == typeFromHandle)
            {
                return(array.Cast <IConfigurable>().ToArray <IConfigurable>());
            }
            if (typeFromHandle.IsSubclassOf(typeof(RequestBase)))
            {
                return(array.Select(new Func <IRequestIndexEntry, T>(RequestIndexEntryProvider.CreateRequest <T>)).Cast <IConfigurable>().ToArray <IConfigurable>());
            }
            MrsTracer.Common.Warning("IndexId not supported by this provider.", new object[0]);
            return(Array <IConfigurable> .Empty);
        }