none
Dividir lista em partes iguais para outra lista RRS feed

  • Pergunta

  • Eu tenho uma lista de chamados que gera todo dia X.

    depois que a lista é gerada, eu abro uma tela, onde eu seleciono os técnicos que eu quero que atenda esses chamados.

    então supondo que eu tenho 20 chamados gerados, e na minha tela de de técnicos, eu escolhi 3 técnicos.

    eu quero dividir esses chamados em igual, para os técnicos, (mesmo que algum fique um 1 a mais, não tem problema).

    Alguém pode me falar como eu poderia fazer isso? usando um foreach? for? matriz? vetor? 

    eu tentei dessa maneira aqui, mas infelizmente, ele atribuiu todos os chamados para um único técnico.

    public ActionResult DistribuirRetornos(int[] IdUsuario)
            {
                DateTime dataContegem = DateTime.Today;
                DateTime primeiroDiaDoMesContagem = new DateTime(dataContegem.Year, dataContegem.Month, 1);
                DateTime ultimoDiaDoMesContagem = new DateTime(dataContegem.Year, dataContegem.Month, DateTime.DaysInMonth(dataContegem.Year, dataContegem.Month));
    
                var Retornos = db.RetornoDb.Where(r => r.DataAbertura >= primeiroDiaDoMesContagem && r.DataAbertura <= ultimoDiaDoMesContagem).ToList();
    
                foreach (var item in Retornos)
                {
                    foreach (var u in IdUsuario)
                    {
                        item.IdUsuario = u;
    
                    }
                    db.Entry(item).State = EntityState.Modified;
                    db.SaveChanges();
                }
                return View();
            }

     
    terça-feira, 28 de maio de 2019 14:53

Todas as Respostas

  • Boa tarde!

    Idusuario é um vetor de usuários? Você consegue puxar a informação de tamanho dele? 

    Se sim, você pode tentar aplicar algo semelhante a isso:

    //sem aplicacao pratica, apenas para expressar a ideia
    
    //esta variavel fica caminhando pelo vetor de usuarios,
    //sendo zerada cada vez que passa pelo ultimo usuario
    int aux = 0;
    
    foreach(var item in Retornos) {
    
    	//se estiver depois do ultimo usuario, retorna ao primeiro
    	if (aux > tamanho_idUsuario) aux = 0; 
    	item.Idusuario = Idusuario[aux];
    	aux++;
    }
     

    Espero que ajude!


    Igor F. Kunrath

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    Technet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    terça-feira, 28 de maio de 2019 16:53
    Moderador
  • Verifique se com a seguinte solução funciona.

    public ActionResult DistribuirRetornos(int[] IdUsuario)
            {
                DateTime dataContegem = DateTime.Today;
                DateTime primeiroDiaDoMesContagem = new DateTime(dataContegem.Year, dataContegem.Month, 1);
                DateTime ultimoDiaDoMesContagem = new DateTime(dataContegem.Year, dataContegem.Month, DateTime.DaysInMonth(dataContegem.Year, dataContegem.Month));
    
                var Retornos = db.RetornoDb.Where(r => r.DataAbertura >= primeiroDiaDoMesContagem && r.DataAbertura <= ultimoDiaDoMesContagem).ToList();
    
                for (var i = 0; i< Retornos.Count; i++)
                {
                    Retornos[i].IdUsuario = IdUsuario[i % IdUsuario.Length];
                    
                    db.Entry(item).State = EntityState.Modified;
                    db.SaveChanges();
                }
                return View();
            }

    Tiago Sampaio Correa, .Net Developer.


    terça-feira, 28 de maio de 2019 16:59