Esempio n. 1
0
        public UserListModel GetUserListModelPaged(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            using (var myAdapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(myAdapter);

                var orgQuery = BuildQuery(filter as UserListModelFilter, linqMetaData);

                //var organziationRoleUserEntities = orgQuery.OrderBy(oru => oru.User.FirstName).TakePage(pageNumber, pageSize).ToList(); ... This takes 9 seconds when resolving a prefetch to User table.
                var organziationRoleUserEntities = orgQuery.TakePage(pageNumber, pageSize).ToList();
                var users =
                    (from u in linqMetaData.User
                     where organziationRoleUserEntities.Select(oru => oru.UserId).Contains(u.UserId)
                     select u).ToArray();

                organziationRoleUserEntities.ForEach(
                    oru => oru.User = users.Where(u => u.UserId == oru.UserId).SingleOrDefault());

                totalRecords = orgQuery.Count();

                var addressIds = organziationRoleUserEntities.Select(oru => oru.User.HomeAddressId).ToList();
                var addresses  = linqMetaData.Address.WithPath(pf => pf.Prefetch(a => a.City).Prefetch(a => a.State).Prefetch(a => a.Zip)).Where(address => addressIds.Contains(address.AddressId)).ToList();

                var orgRoleUsers  = _organizationRoleUserRepository.GetOrganizationRoleUserByUserIds(organziationRoleUserEntities.Select(oru => oru.UserId).ToArray());
                var otganizations = _organizationRepository.GetOrganizations(orgRoleUsers.Select(oru => oru.OrganizationId).ToArray());
                var roles         = _roleRepository.GetAll();

                var userListModel = _factory.Create(organziationRoleUserEntities, addresses, orgRoleUsers, otganizations, roles);
                return(userListModel);
            }
        }