Array
(
)

Distinct na linq não está funcionando

Pjava
   - 23 set 2014

Fiz essa linq em minha model:

#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


                               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ódigo
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
   - 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>