예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
        }
예제 #4
0
        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());
        }