Distinct na linq não está funcionando

23/09/2014

0

Fiz essa linq em minha model:


public static List<MontaArvoreAcao> CriarListaArvoreAcao()
        {
            RupturaEntities db = new RupturaEntities();


              var _listaUnidade = (
                               from r in db.Ruptura
                               join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
                               join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
                               where r.IDMotivo != 6


                               select new MontaArvoreAcao
                               {
                                   Codigo_Unidade_Negocio = a.Codigo_Unidade_Negocio,
                                   Unidade_Negocio = a.Unidade_Negocio
                               }).ToList().Distinct();

            return _listaUnidade.ToList();
        }
    }


Tentando reproduzir esse selet que funciona como eu quero:

select distinct a.Unidade_Negocio, r.IDMotivo

from Ruptura r
join Apresentacao a on a.Codigo_Apresentacao = r.Codigo_Apresentacao
join Motivo m on r.IDMotivo = m.IDMotivo

group by r.IDMotivo,a.Unidade_Negocio

order by r.IDMotivo



Gostaria de saber o que fazer para funcionar? No select, com o Distinct, eu trago apenas 17 registros, já na linq eu trago mais de 3 mil. Só preciso trazer uma UN para cada motivo, conforme está na query(select).
Pjava

Pjava

Responder

Posts

24/09/2014

Pjava

Estamos chegando perto. Com esse código, quase funcionou. Aí troquei o Distinct() para DistinctBy() e não repetiu, mas continua não obedecendo o IDMotivo. O que vem na linq não condiz com a query. Em todos os Motivos eu trouxe 3 UN's, sendo que no Motivo de ID=4, eu deveria ter apenas 2 UN's, o que parece que ele está trazendo a mesma informação, independente do IDMotivo. Estou aqui tentando uma solução. Veja como ficou meu código.

public static List<MontaArvoreAcao> CriarListaArvoreAcao()
{
RupturaEntities db = new RupturaEntities();

var _listaUnidade = (
from r in db.Ruptura
join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
where r.IDMotivo != 6
group r by new { a.Unidade_Negocio, r.IDMotivo } into gr
select new MontaArvoreAcao
{
IDMotivo = gr.Key.IDMotivo,
Unidade_Negocio = gr.Key.Unidade_Negocio
}).DistinctBy(u => u.Unidade_Negocio).DistinctBy(m => m.IDMotivo).ToList().OrderBy(r => r.IDMotivo);

return _listaUnidade.ToList();
}
Responder

24/09/2014

Pjava

Da forma como está, sem o DistinctBy, eu consigo trazer todas as UN's. Fazendo uma leitura das UN's está assim:

{GENÉRICOS,MIP,DERMOCOSMÉTICOS},{DERMOCOSMÉTICOS,MIP,GENÉRICOS},{MIP,GENÉRICOS,DERMOCOSMÉTICOS},{DERMOCOSMÉTICOS,GENÉRICOS},{MIP,GENÉRICOS,DERMOCOSMÉTICOS}


Para os respectivos Motivos:

{VENDEU TODO ESTOQUE},{PRODUTO EM FALTA NO CENTRO DE DISTRIBUIÇÃO},{PRODUTO NÃO CADASTRADO NA CENTRAL},{PRODUTO INATIVO},{PRODUTO CADASTRADO / SOB ENCOMENDA}


Que representam respectivamente os ID's: 1,2,3 e 4.

Veja que me trouxe conforme a query, mas não consigo fazer uma redistribuição para cada Motivo. Como é minha tela. A minha tela cria os primeiro nó com os checkbox referentes a cada Motivo. Os motivos estão listados corretamente e os checkbox são criados corretamente. Aí quando eu vou listar as UN's, cada qual em baixo dos seus motivo correspondente, é que não funciona adequadamente, ou seja, para cada Motivo criado na página, eu listo todos esses Motivos de uma vez para cada Motivo. O correto é lista, para cada Motivo, as UN's correspondentes. Pode ser que falta alguma coisa, algum ID, mas qual? Cheguei a um ponto em não saber mais nada. Deveria ser um Distinct para o ID apropriado, mas eu faço isso? Essa é minha dúvida cruel que eu estou passando. Mas dessa forma trouxe todos corretamente e agradeço ao Breno pela solução. O que falta é a distribuição para cada Motivo correspondente. No aguardo e obrigado
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar