private static Expression <Func <Department, bool> > Filter(DepartmentQueryRequest filter)
        {
            var query = PredicateBuilder.True <Department>();

            if (filter != null)
            {
                if (!String.IsNullOrWhiteSpace(filter.NamePrefix))
                {
                    query = PredicateBuilder.And(query, v => v.Name.StartsWith(filter.NamePrefix));
                }

                if (!String.IsNullOrWhiteSpace(filter.Name))
                {
                    query = PredicateBuilder.And(query,
                                                 v => v.Name.Equals(filter.Name));
                }

                if (filter.StoreId != null)
                {
                    query = PredicateBuilder.And(query, v => v.StoreId == filter.StoreId.Value);
                }

                if (filter.StoreId == null && filter.DataRoleStores != null)
                {
                    query = PredicateBuilder.And(query, v => filter.DataRoleStores.Contains(v.StoreId));
                }
            }

            return(query);
        }
        public PagerInfo <DepartmentDto> GetPagedList(PagerRequest pagerRequest, DepartmentQueryRequest request)
        {
            var departmentFilter = Filter(request);

            using (var db = GetYintaiHZhouContext())
            {
                var departments = db.Departments;
                var stores      = db.Stores;

                var q = from department in departments.AsExpandable().Where(departmentFilter)
                        join store in stores on department.StoreId equals store.Id
                        select new DepartmentDto
                {
                    Id        = department.Id,
                    Name      = department.Name,
                    StoreId   = store.Id,
                    StoreName = store.Name,
                    SortOrder = department.SortOrder
                };
                var total = q.Count();

                var lst = q.OrderByDescending(v => v.SortOrder).Skip(pagerRequest.SkipCount).Take(pagerRequest.PageSize).ToList();

                return(new PagerInfo <DepartmentDto>(pagerRequest, total, lst));
            }
        }
        public IHttpActionResult GetList([FromUri] DepartmentQueryRequest request, [UserProfile] UserProfile userProfile)
        {
            IHttpActionResult httpActionResult;
            var result = CheckDataRoleAndArrangeParams(request, userProfile, out httpActionResult);

            if (!result)
            {
                return(httpActionResult);
            }

            var dto = _departmentRepository.GetPagedList(request.PagerRequest, request);

            return(RetrunHttpActionResult(dto));
        }