protected static IQueryable <TEntity> ProcessTextSearchParameters <TEntity>(TextSearchParameters textSearchParameters, IQueryable <TEntity> query) where TEntity : class { if (textSearchParameters == null) { return(query); } var textSearchNeeded = textSearchParameters.TextSearchNeeded(); if (textSearchNeeded) { query = query.Where(textSearchParameters.GetDynamicLinqWhereClauseExpression()); } return(query); }
public static string GetDynamicLinqWhereClauseExpression(this TextSearchParameters textSearchParameters) { if (string.IsNullOrWhiteSpace(textSearchParameters.SearchText)) { throw new ArgumentException("Search text cannot be null or empty", nameof(textSearchParameters.SearchText)); } if (textSearchParameters.SearchFields == null || textSearchParameters.SearchFields.Count == 0) { throw new ArgumentException("Search fields cannot be null or empty", nameof(textSearchParameters.SearchFields)); } var responseExpression = string.Format("{0}.Contains(\"{1}\")", textSearchParameters.SearchFields[0], textSearchParameters.SearchText); for (var i = 1; i < textSearchParameters.SearchFields.Count; i++) { responseExpression += string.Format("or {0}.Contains(\"{1}\")", textSearchParameters.SearchFields[i], textSearchParameters.SearchText); } return(responseExpression); }
public async Task <IEnumerable <T> > GetAsync( Expression <Func <T, bool> > filter = null, TextSearchParameters textSearchParameters = null, SortingParameters sortingParameters = null, PagingParameters pagingParameters = null, Func <IQueryable <T>, IIncludableQueryable <T, object> > include = null, bool disableTracking = false) { IQueryable <T> query = context.Set <T>(); query = ProcessFilter(filter, query); query = ProcessDisableTracking(disableTracking, query); query = ProcessTextSearchParameters(textSearchParameters, query); query = ProcessSortingParameters(sortingParameters, query); query = ProcessPagingParameters(pagingParameters, query); query = ProcessIncludes(include, query); return(await query.ToListAsync()); }
public async Task <int> GetCountAsync(Expression <Func <T, bool> > filter = null, TextSearchParameters textSearchParameters = null) { IQueryable <T> query = context.Set <T>(); query = ProcessFilter(filter, query); query = ProcessTextSearchParameters(textSearchParameters, query); return(await query.CountAsync()); }