示例#1
0
        /// <summary>
        ///     Search
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        //[AbpAuthorize(PermissionNames.GlobalConfiguration_Users_Read)]
        public List <DeviceDto> QueryInfoSearch(QueryInfo input)
        {
            var        obj                = new QueryInfo();
            var        skipNum            = input.Skip;
            var        takeNum            = input.Take;
            var        query              = _deviceRepository.GetAll();
            var        sorters            = input.Sorters;
            var        rules              = input.Filter.Rules;
            var        condition          = input.Filter.Condition;
            var        parameterEx        = Expression.Parameter(typeof(Device), "x");
            Expression containsExpression = Expression.Constant(false);
            Expression currentContainsExpression;
            Expression result;

            foreach (var property in input.SearchProperties)
            {
                currentContainsExpression = obj.GetBinaryExpression(parameterEx, "ct", property, input.SearchText);
                containsExpression        = Expression.OrElse(containsExpression, currentContainsExpression);
            }

            result = obj.GetFilteredList <Device>(parameterEx, rules, condition);
            result = Expression.AndAlso(containsExpression, result);

            var whereEx = obj.GetWhere <Device>(result, parameterEx);

            query = query.Where(whereEx);

            var sortedFirst = false;

            foreach (var sort in sorters)
            {
                var sortProperty  = sort.Property;
                var sortDirection = sort.Direction;

                switch (sortDirection)
                {
                case "asc":
                    if (!sortedFirst)
                    {
                        query       = query.OrderBy(obj.GetOrderByExpression <Device>(sortProperty));
                        sortedFirst = true;
                    }
                    else
                    {
                        query = ((IOrderedQueryable <Device>)query).ThenBy(
                            obj.GetOrderByExpression <Device>(sortProperty));
                    }

                    break;

                case "desc":
                    if (!sortedFirst)
                    {
                        query       = query.OrderByDescending(obj.GetOrderByExpression <Device>(sortProperty));
                        sortedFirst = true;
                    }
                    else
                    {
                        query = ((IOrderedQueryable <Device>)query).ThenByDescending(
                            obj.GetOrderByExpression <Device>(sortProperty));
                    }

                    break;

                default:
                    throw new InvalidOperationException();
                }
            }

            query = query.Skip(skipNum).Take(takeNum);
            var queryToReturn = ObjectMapper.Map <List <DeviceDto> >(query);

            return(queryToReturn.ToList());
        }