/// <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);
        }