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