Array
(
)

Distinct na linq não está funcionando

Pjava
   - 23 set 2014

Fiz essa linq em minha model:

#Códigopublic 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:
#Códigoselect 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
   - 24 set 2014

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

Pjava
   - 24 set 2014

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

#Código{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:

#Código{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

Pjava
   - 24 set 2014

Resolvido assim:
#Código<ul>
@foreach (var item in Model)
{
if (_motivo != @item.Motivo)
{
_idmotivo = @item.IDMotivo;
<li item-checked='false' item-expanded='false'>
@item.Motivo

<ul>
@foreach (var un in (List<Ruptura.Models.MontaArvoreAcao>) ViewData["ListaUn"])
{
if (@un.IDMotivo == @item.IDMotivo) ==> AQUI RESOLVEU
{
<li item-checked='false' item-expanded='false'>
@un.Unidade_Negocio

</li>
}
}
</ul>
</li>
}
_motivo = @item.Motivo;
}
</ul>