Hello.
IQueryable extension method ToDataSourceResult currently creates query like
myQuery.Where(x=>x.SearchField.Contains(searchString))
when using Contains operator.
Unfortunately I'm using no-sql database RavenDb and its linq provider doesn't support contains method. Instead it offers extension for IQueryable called Search.
So when doing full-text search I should write myQuery.Search(x=>x.SearchField, searchString) instead Where clause. That's why I'm curious is there any opportunity to override default predicate builder?
Right now I'm doing it so (it's very basic implementation):
Is it correct workaround? Or there is more obvious solution that I couldn't find in docs?
IQueryable extension method ToDataSourceResult currently creates query like
myQuery.Where(x=>x.SearchField.Contains(searchString))
when using Contains operator.
Unfortunately I'm using no-sql database RavenDb and its linq provider doesn't support contains method. Instead it offers extension for IQueryable called Search.
So when doing full-text search I should write myQuery.Search(x=>x.SearchField, searchString) instead Where clause. That's why I'm curious is there any opportunity to override default predicate builder?
Right now I'm doing it so (it's very basic implementation):
public static IQueryable<TEntity> ApplyFiltering<TEntity>(this IQueryable<TEntity> queryable, IList<IFilterDescriptor> filters) where TEntity:class { foreach (var filter in filters.Cast<FilterDescriptor>()){ var pe = Expression.Parameter(typeof(TEntity), "x"); var left = Expression.Property(pe, typeof(TEntity).GetProperty(filter.Member)); queryable = queryable.Search(Expression.Lambda<Func<TEntity, object>>(left, new ParameterExpression[] { pe }), filter.Value.ToString()); } filters.Clear(); return queryable; }//And controller code: public ActionResult Data_Read([DataSourceRequest] DataSourceRequest request) { var query = repository.GetQueryable(); query = query.ApplyFilters(request.Filters); return Json(query.ToDataSourceResult(request)); }