/// <inheritdoc cref="IValueRepository"/> public async Task <PagedResult <Entities.Value> > GetAsync(SearchTermValue searchTermValue) { Expression <Func <Entities.Value, bool> > searchExpression = BuildSearchValuesExpression(searchTermValue); Expression <Func <Entities.Value, dynamic> > orderExpression = BuildValuesOrderExpression(searchTermValue?.OrderBy); var values = await _dbContext.Values .Where(searchExpression) .OrderByWithDirection(orderExpression, searchTermValue?.SortDirection == null || searchTermValue.SortDirection == SortDirection.Desc) .GetPagedResultAsync(searchTermValue?.Skip, searchTermValue?.Take); return(values); }
private Expression <Func <Entities.Value, bool> > BuildSearchValuesExpression(SearchTermValue searchTermValue) { Expression <Func <Entities.Value, bool> > expression = e => !e.DeletedUtc.HasValue; if (searchTermValue != null) { if (!string.IsNullOrEmpty(searchTermValue.Q)) { IEnumerable <string> terms = searchTermValue.Q.Split(' ').Where(e => !string.IsNullOrWhiteSpace(e.ToLower())); foreach (string term in terms) { expression = expression.And(e => e.Name.ToLower().Contains(term)); } } if (searchTermValue.CreatedAfterUtc.HasValue) { expression = expression.And(e => e.CreatedUtc >= searchTermValue.CreatedAfterUtc.Value); } if (searchTermValue.CreatedBeforeUtc.HasValue) { expression = expression.And(e => e.CreatedUtc <= searchTermValue.CreatedBeforeUtc.Value); } } return(expression); }