public override IEnumerable <TElement> FindElements <TElement>(AlgoliaQuery query) { SearchLog.Log.Debug("Executing query: " + query.ToString()); var index = _context.Index as AlgoliaBaseIndex; Assert.IsNotNull(index, "context.Index is not an instance of AlgoliaSearchIndex"); var response = _repository.SearchAsync(query.Query).Result; var nodes = response["hits"]; if (nodes != null) { foreach (var node in nodes) { var jobj = node as JObject; if (jobj == null) { throw new Exception("Wrong type"); } yield return(new DefaultAlgoliaDocumentTypeMapper().MapToType <TElement>(jobj, null, null, SearchSecurityOptions.DisableSecurityCheck)); } } }
//public override IQueryable<TItem> GetQueryable() //{ // IQueryable<TItem> queryable = new GenericQueryable<TItem, AlgoliaQuery>(this, this.QueryMapper, this.QueryOptimizer, this.FieldNameTranslator); // //(queryable as IHasTraceWriter).TraceWriter = this.TraceWriter; // foreach (IPredefinedQueryAttribute predefinedQueryAttribute in // GetTypeInheritanceEx(typeof(TItem)) // .SelectMany((t => t.GetCustomAttributes(typeof(IPredefinedQueryAttribute), true) // .Cast<IPredefinedQueryAttribute>())).ToList()) // queryable = predefinedQueryAttribute.ApplyFilter(queryable, ValueFormatter); // return queryable; //} //private IEnumerable<Type> GetTypeInheritanceEx(Type type) //{ // yield return type; // for (Type baseType = type.BaseType; baseType != (Type)null; baseType = baseType.BaseType) // yield return baseType; //} public override TResult Execute <TResult>(AlgoliaQuery query) { return(default(TResult)); }