Usuário com melhor resposta
Erro ao montar classe .....

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é +
- Movido Seilor Bonancio Junior terça-feira, 13 de setembro de 2011 11:45 (De:ASP.NET)
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
Todas as Respostas
-
-
-
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é +
-
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();
- Editado MarceloSchneider quinta-feira, 8 de setembro de 2011 13:06
-
-
-
-
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
-
-
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.