none
Linq SQL RRS feed

  • Pergunta

  • Bom dia,

    Tenho esse método no meu controller:

     public ActionResult Edit(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                Department department = db.Departments.Find(id);
                if (department == null)
                {
                    return HttpNotFound();
                }
    
                var bossesIDs = db.Departments.Select(x => x.BossId);
                var sellers = db.Sellers.Where(s => s.DeptId == id && !bossesIDs.Contains(s.Id)).ToList();
    
                ViewBag.BossId = new SelectList(sellers, "Id", "Name", department.BossId);
                return View(department);
            }

    O que eu quero:

       - O vendedor chefe (desse departamento) e os demais vendedores contidos nesse Departamento;

    Na parte " !bossIDS.Contains(s.ID) " são "excluídos" todos os vendedores chefes, teria como eu fazer algo do tipo.. "exclua" todos os outros chefes, menos o desse departamento (e é claro com as outras condições que citei acima)?

    Não quero que apareçam nenhum dos chefes de outros departamentos e muito menos os vendedores de outros departamentos.

    Grato.




    • Editado developer033 quarta-feira, 27 de maio de 2015 17:53 Pergunta melhorada
    quarta-feira, 27 de maio de 2015 14:39

Respostas

  • Olá!

    var bossesIDs = db.Departments.Where(x => x.Id != id).Select(x => x.BossId);

    Se entendi a sua pergunta, acho que isto resolve, sendo que entendo que o parâmetro id é o Id do departamento.

    Bom trabalho!

    • Marcado como Resposta developer033 quarta-feira, 27 de maio de 2015 20:29
    quarta-feira, 27 de maio de 2015 16:32

Todas as Respostas

  • Olá!

    var bossesIDs = db.Departments.Where(x => x.Id != id).Select(x => x.BossId);

    Se entendi a sua pergunta, acho que isto resolve, sendo que entendo que o parâmetro id é o Id do departamento.

    Bom trabalho!

    • Marcado como Resposta developer033 quarta-feira, 27 de maio de 2015 20:29
    quarta-feira, 27 de maio de 2015 16:32
  • Olá Rodrigo,

    Já havia pensando nesse jeito que você postou, mas, não funcionou, infelizmente.

    Dei uma melhorada na pergunta, se puder, dá uma olhada.

    PS: E sim, o id passado como parâmetro é o Id do departamento.
    • Editado developer033 quarta-feira, 27 de maio de 2015 17:55
    quarta-feira, 27 de maio de 2015 17:54
  • Bah, cara... No momento só consigo pensar em uma explicação para a forma que enviei anteriormente (e que você também já tentou) não funcionar: um vendedor pode ser chefe de mais de um departamento. supondo que isto seja verdade, acho que a modificação abaixo poderá solucionar o problema:

    var bossesIDs = db.Departments.Select(x => new { x.Id, x.BossId });
    var sellers = db.Sellers.Where(s => s.DeptId == id && (bossesIDs.Where(i => i.BossId == s.Id && i.Id != id).Count() > 0 && bossesIDs.Where(i => i.BossId == s.Id && i.Id == id).Count() == 0)).ToList();

    Na loucura da minha cabeça funcionou :). Fora isto, não consigo pensar em outra solução no momento.

    Bom trabalho!

    quarta-feira, 27 de maio de 2015 19:37
  • Oi Rodrigo,

    Pior que está funcionando sim, eu que acabei testado errado.. antes (no início do projeto), havia inserido um vendedor como chefe de um departamento que nem sequer ele trabalhava, e isso acabou confundindo tudo.

    Mas tá funcionando sim, inclusive, nem precisava disso tudo que eu tava querendo fazer.

    Estava preso à lógica que fiz no Create() e nem precisava disso tudo.

    Dessa forma ficou bem mais simples e resolve:

    return db.Sellers.Where(s => s.DeptId == id).ToList();

    Sim, apenas isso, porque no create do Departamento já faço uma validação.

    No edit, preciso apenas selecionar todos os vendedores e o chefe, somente desse departamento.

    Peço desculpas pelo falso positivo, rs.

    Obrigado pela ajuda.


    • Editado developer033 quarta-feira, 27 de maio de 2015 20:36
    quarta-feira, 27 de maio de 2015 20:35