none
Erro ao montar classe ..... RRS feed

  • Pergunta

  • Boa noite a todos...

    estou tentando montar a seguinte classe:

     

    public List<Tributacao> ListaTributacao()
        {
            
            
            netcommerceEntities netcom = new netcommerceEntities();
            var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select new { t.Codigotributacao, c.NomeCategoria, t.UForigem, t.UFdestino, t.Percentualtributacao };
     
            return trib.ToList();
    
        }

    Na ultima linha quero retornar os dados criado para exibir em um grid.... Como Faço?????

    Alguém pode me ajudar???

     

    Desde já agradeço

     

    Até +

    terça-feira, 6 de setembro de 2011 22:36

Respostas

  • Rogérgio, bom dia.

    Se a sua intenção é retornar somente os dados filtrados, você não precisa deste select new,

    faça assim:

     var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select t;
    
    


    Agora, caso você queira montar um novo objeto que seja uma junção de tributação e categoria, você terá de criar uma classe pra isso, por exemplo:

    public class TributacaoCategoria
    {
        public int CodigoAtribuicao { get; set; }
        public string NomeCategoria { get; set; }
        public string UForigem { get; set; }
        public string UFdestino { get; set; }
        public double PercentualTributacao { get; set; }
    }
    


    e então instanciar esse objeto para trazer uma lista tipada da sua consulta:

    public List<TributacaoCategoria> ListaTributacao()
        {
           
            netcommerceEntities netcom = new netcommerceEntities();
            var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select new TributacaoCategoria()
                            {
                                CodigoAtribuicao = t.Codigotributacao,
                                NomeCategoria = c.NomeCategoria,
                                UForigem = t.UForigem,
                                UFdestino = t.UFdestino,
                                PercentualTributacao = t.Percentualtributacao
                            };
     
            return trib.ToList();
    }
    
    

    O motivo disto é por que quando você aplica o Select NEW sem especificar que classe será utilizada para montar os objetos, A framework cria um tipo anônimo que é totalmente diferente dos tipos existentes.

     


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Rogério Furlan terça-feira, 13 de setembro de 2011 17:07
    terça-feira, 13 de setembro de 2011 12:05
    Moderador

Todas as Respostas

  • Eu consigo jogando direto no código no page _load mas eu queria deixar todas as consultas em uma classe separada.

     

    Desde já agradeço

     

    Até

    quarta-feira, 7 de setembro de 2011 01:21
  • Rogério,

    Não consegui entender ao certo seu problema. Quando a função está numa classe, você a chama para fazer o bind num Grid e ela não retorna nada?

    quarta-feira, 7 de setembro de 2011 01:35
  • Bruno boa tarde....

     

    Eu quero escrever a função acima dentro de uma classe separada, isto é, se eu escrever ela no page_load do "form" funciona e carrega o grid.(estou fazendo assim)

    Mas eu gosto de separar as consultas em uma classe, só que não sei como escrevê-la e e como chamá-la no page_load.

     

     Desde já agradeço..

     

    Até +

    quarta-feira, 7 de setembro de 2011 19:30
  • Crie sua classe

    e um método que retorna uma lista:

     

    public class Dados
    {
    public List<Tributacao> ListaTributacao()
        {
           
            netcommerceEntities netcom = new netcommerceEntities();
            var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select new { t.Codigotributacao, c.NomeCategoria, t.UForigem, t.UFdestino, t.Percentualtributacao };
     
            return trib.ToList();
    }
    

     

    Ai no page load, ou no botão que deseja pesquisar:

     

    Dados dados = new Dados();
    suagrid.DataSource = dados.ListaTributacao();
    suagrid.DataBind();
     

    quinta-feira, 8 de setembro de 2011 13:05
  • Boa noite Marcelo....

    Ele me da um erro no return da função: return trib.ToList() coloquei uma imagem abaixo....

     

    Desde já agradeço

     

    Até +

    sexta-feira, 9 de setembro de 2011 01:48
  • Tenta assim:

    return trib.ToList<netcommerceModel.Tributacao>();
    

    Nos fale se funcionou ;)

    sexta-feira, 9 de setembro de 2011 20:38
  • Boa noite Narcos Paulo....

     

    Não funcionou do jeito que vc falou, mas mesmo assim obrigado pela tentativa.

     

    abraços

     

    Rogério Furlan

     

    segunda-feira, 12 de setembro de 2011 23:03
  • Rogérgio, bom dia.

    Se a sua intenção é retornar somente os dados filtrados, você não precisa deste select new,

    faça assim:

     var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select t;
    
    


    Agora, caso você queira montar um novo objeto que seja uma junção de tributação e categoria, você terá de criar uma classe pra isso, por exemplo:

    public class TributacaoCategoria
    {
        public int CodigoAtribuicao { get; set; }
        public string NomeCategoria { get; set; }
        public string UForigem { get; set; }
        public string UFdestino { get; set; }
        public double PercentualTributacao { get; set; }
    }
    


    e então instanciar esse objeto para trazer uma lista tipada da sua consulta:

    public List<TributacaoCategoria> ListaTributacao()
        {
           
            netcommerceEntities netcom = new netcommerceEntities();
            var trib = from t in netcom.Tributacao
                       join c in netcom.Categoria on t.Categoria_Codigo equals c.Codigo
                       orderby t.Codigotributacao
                       select new TributacaoCategoria()
                            {
                                CodigoAtribuicao = t.Codigotributacao,
                                NomeCategoria = c.NomeCategoria,
                                UForigem = t.UForigem,
                                UFdestino = t.UFdestino,
                                PercentualTributacao = t.Percentualtributacao
                            };
     
            return trib.ToList();
    }
    
    

    O motivo disto é por que quando você aplica o Select NEW sem especificar que classe será utilizada para montar os objetos, A framework cria um tipo anônimo que é totalmente diferente dos tipos existentes.

     


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Rogério Furlan terça-feira, 13 de setembro de 2011 17:07
    terça-feira, 13 de setembro de 2011 12:05
    Moderador
  • Boa Tarde Olavo......

     

    Muito obrigado....

     

    Funcionou Direitinho...

     

    Abraços

     

    Rogério Furlan

    terça-feira, 13 de setembro de 2011 17:07
  • A titulo de curioside  ja que o problema foi resolvido 

    para popular componentes como grid dropdownlist pode se fazer um metodo do tipo Iqueriable retornando os campos como anonimos usando o new ou não!! de acordo com o que se deseja.

     

    apenas movendo o retorno do metodo para o datasource do grid!!! exemplo abaixo

     

    public IQueryable RetornaDadosUsuario()
            {
    
                var grid = from U in dc.TblUsuarios join S 
                in dc.TblSetors on U.id_Setor equals S.id_Setor join P 
                in dc.TblPerfils on U.id_Perfil equals P.id_Perfil
                
                           select new
                            {
                                U.id_Usuario,U.Nome,U.Usuario,U.Senha,S.DescricaoSetor,P.DescricaoPerfil,U.id_Perfil,
                                U.Email,U.Telefone,U.Ativo,U.PrimAcessTrocSenha,U.Matricula };         
                return grid;
            }
    

    na pagina fica algo do tipo

     grid.DataSource =  RetornaDadosUsuario();

     frid.DataBind();

     

    mas se precisa dos dados para preencher um ou varios textbox ou manipular as informações

    por exemplo tem q se fazer como a solução anterior mas para gridou ddl não precisa.


    terça-feira, 27 de setembro de 2011 12:53