Distinct na linq não está funcionando
23/09/2014
0
Fiz essa linq em minha model:
Tentando reproduzir esse selet que funciona como eu quero:
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).
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
Curtir tópico
+ 0
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();
}
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:
Para os respectivos Motivos:
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
{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
Clique aqui para fazer login e interagir na Comunidade :)