none
Unable to create a constant value of type Entity RRS feed

  • Pergunta

  • Estou tentando carregar uma lista com Linq e Entity dessa maneira:

     

     

     using (WEBEntities c = new WEBEntities())
    
                    {
    
                        var evento = (from e in c.Evento
    
                                      where e.IdEvento == new Guid(codigo)
    
                                      select new VOEvento
    
                                      {
    
                                          IdEvento = e.IdEvento,
    
                                          CodEvento = e.CodEvento,
    
                                          Nome = e.Nome,
    
                                          ListLocal = Local.Busca(new Guid(codigo)) // Evento carrega lista de Locais
    
                                      }).ToList();
    
    
    
                        return evento.FirstOrDefault();
    
                    }

     

     

    porém recebo o erro:

     

    Unable to create a constant value of type ''. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

     

    COmo POsso carregar uma lista dentro do Linq Entity ?

     

     

    segunda-feira, 6 de junho de 2011 21:22

Respostas

  • Amigo, o Entity Framework é cheio de restrições que podem até parecer estranhas, mas tente assim:

     using (WEBEntities c = new WEBEntities())
    
            {
    
              var evento = (from e in c.Evento
    
                     where e.IdEvento == new Guid(codigo)
    
                     select new VOEvento
    
                     {
    
                       IdEvento = e.IdEvento,
    
                       CodEvento = e.CodEvento,
    
                       Nome = e.Nome
    
                     }).ToList();
    
              foreach (VOEvento v in evento)
    			v.ListLocal = Local.Busca(new Guid(codigo));
    
              return evento.FirstOrDefault();
    
            }
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    terça-feira, 7 de junho de 2011 12:00
    Moderador

Todas as Respostas

  • Amigo, o Entity Framework é cheio de restrições que podem até parecer estranhas, mas tente assim:

     using (WEBEntities c = new WEBEntities())
    
            {
    
              var evento = (from e in c.Evento
    
                     where e.IdEvento == new Guid(codigo)
    
                     select new VOEvento
    
                     {
    
                       IdEvento = e.IdEvento,
    
                       CodEvento = e.CodEvento,
    
                       Nome = e.Nome
    
                     }).ToList();
    
              foreach (VOEvento v in evento)
    			v.ListLocal = Local.Busca(new Guid(codigo));
    
              return evento.FirstOrDefault();
    
            }
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    terça-feira, 7 de junho de 2011 12:00
    Moderador
  • Veja

    http://stackoverflow.com/questions/879411/entity-framework-unable-to-create-a-constant-value-of-type-closure-type


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    terça-feira, 7 de junho de 2011 12:04
  • Dessa forma resolveu, mas isso é um bug ou uma limitação sem um 'porquê' ?
    terça-feira, 7 de junho de 2011 17:28
  • No meu ver, não é nenhum nem o outro, mas seria mais próximo de uma lmitação que um bug. Entenda que tudo que tudo que você faz com relação LINQ para EF, tem de ser transformado pela Framework em comandos SQL, por isso que alguns comandos não tem como ser interpretados em tempo de execução. Por exemplo se você fizer um código parecido mas para LINQ TO Objects, verá que e a mesma coisa irá funcionar sem problemas. Pois não existe Conversão SQL no meio. 

     List<Usuario> Usuarios = new List<Usuario>()
          {
            new Usuario{Id = 1, Nome="Olavo Oliveira Neto", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 2, Nome="John Doe", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 3, Nome="marty mcfly", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 4, Nome="Tyler Durden", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 5, Nome="Launchpad Mcquack", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 6, Nome="Goku", dtNascimento = new DateTime(1986,3,11)},
            new Usuario{Id = 7, Nome="Kaneda Shōtarō", dtNascimento = new DateTime(1986,3,11)}
          };
    
          var query = (from c in Usuarios
                 select new Usuario()
                 {
                   Id = c.Id,
                   Nome = c.Nome,
                   Sistemas = Sistemas
                 }).ToList(); 
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    terça-feira, 7 de junho de 2011 17:40
    Moderador
  • Entendi, perfeito, funcionou certinho, só estranhei por estar mais familiarizado com LINQ To SQL que permite esse tipo de select.

     

    Obrigado.

    quarta-feira, 8 de junho de 2011 14:16
  • pcclaro, se funcionou e deu certo, você poderia marcar como resposta para que outras pessoas com a mesma dúvida possam saber como fazer ?

     

    Obrigado


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    quinta-feira, 9 de junho de 2011 14:01
    Moderador