Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

View não exibe tabela em codigo com duas tabelas do linq.. Socorro

Pessoal, boa tarde.

Estou fazendo uma view para exibir uma tabela. Quando uso o codigo abaixo no CadastroController e na view , funciona.

Codigo do Controller funcionando:

            BancoDeDados.dcTseOEEDataContext bd = new BancoDeDados.dcTseOEEDataContext();
            var teste = from it in bd.tbl_TPE_TipoEvento where it.tpe_Excluido == false  select it;
            ViewBag.TipoEvento = teste;
            return View();

Codigo da view funcionando:

<tbody>
          @foreach (var item in ViewBag.TipoEvento)
          {
             <tr>
                     <td>@item.tpe_ID</td>
                      <td>@item.gre_ID</td>
                       <td>@item.tpe_Descricao</td>
                       <td>@item.tpe_Classificacao</td>
                        <td>@Html.ActionLink("Editar", "TipoEventoEdit", new {idTpe = item.tpe_ID, idGre = item.gre_ID })</td>
                  </tr>
                }
</tbody>

Porem, eu preciso que o resultado listado nessa view seja um join entre duas tabelas. Fiz o codigo abaixo no CadastroController, porem a view não funciona de jeito nenhum.

Novo codigo do controller:

            BancoDeDados.dcTseOEEDataContext bd = new BancoDeDados.dcTseOEEDataContext();

            var Producao = (from tpe in bd.tbl_TPE_TipoEvento
                            join gre in bd.tbl_GRE_GrupoEvento on tpe.gre_ID equals gre.gre_ID

                            where tpe.tpe_Excluido == false && gre.gre_Excluido == false
                            select new
                            {
                                tpe.tpe_ID,
                                tpe.gre_ID,
                                gre.gre_Descricao,
                                tpe.tpe_Descricao,
                                tpe.tpe_Classificacao,
                                tpe.tpe_Excluido
                            });//.ToList();

            ViewBag.TipoEvento = Producao;

            return View();

o ToList esta desabilitado no codigo pq achei q era ele, mas nao funciona mesmo assim. Achei estranho pq o primeiro exemplo funciona certinho.. e na view, que tem os mesmos campos, da o erro abaixo logo no primeiro campo do Foreach:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''object' não contém uma definição para 'tpe_ID''

Ja tentei mudar a chamada da viewbag para o exemplo abaixo, porem nao rolou tb:

 <td>@item.tpe.tpe_ID</td>
<td>@item.tpe.gre_ID</td>
<td>@item.tpe.tpe_Descricao</td>
<td>@item.tpe.tpe_Classificacao</td>

Alguem sabe o q esta rolando ? E como exibir esse join de tabelas ?

Obrigado.

2 respostas
solução!

Olá, Felippe!

No primeiro exemplo, você estava usando a entidade tbl_TPE_TipoEvento, e funcionou. Agora que está usando um objeto anônimo, não funciona mais, certo? Em vez de um objeto de tipo anônimo, crie uma classe com as propriedades que você precisa, e retorne essa classe com select new MinhaClasse { Prop1 = ..., Prop2 = ... }.

Boa sorte e bons estudos!

Funcionou aqui.. Muito obrigado Marcelo.