none
Optimização classe genérica conversão de DataTable para List<T> RRS feed

  • Pergunta

  • O método converte os resultados de um DataTable vindo do banco de dados para uma Classe que possui os mesmos atributos com mesmos nomes e tipos.
    Porem como na programação os campos onde seriam chave estrangeira, viram um atributo de outro tipo de classe, ele mantém o atributo nulo. EX:

    class Cliente
    {
        public int IdCliente { get; set; }                 //OK
        public string Nome { get; set; }     //OK
        public Conta Conta { get; set; }     //Null (se fosse int IdConta estava OK)
    }
    
    class Conta
    {
        public int IdConta { get; set; }
        public string Tipo { get; set; }
    }
    Queria saber se seria possível optimizar este método, Envés de ele tentar colocar o Inteiro da FK no atributo que é uma classe, ele entrasse dentro desta classe e Colocasse o valor no atributo dela. 
    private List<T> ConvertToList<T>(DataTable dt)
    {
    	var columnNames = dt.Columns.Cast<DataColumn>()
    			.Select(c => c.ColumnName)
    			.ToList();
    	var properties = typeof(T).GetProperties();
    	return dt.AsEnumerable().Select(row =>
    	{
    		var objT = Activator.CreateInstance<T>();
    		foreach(var pro in properties)
    		{
    			if(columnNames.Contains(pro.Name))
    			{
    				System.Reflection.PropertyInfo pI = objT.GetType().GetProperty(pro.Name);
    
    				pro.SetValue(objT, (row[pro.Name] == DBNull.Value) ? null : Convert.ChangeType(row[pro.Name], pI.PropertyType));
    			}
    		}
    		return objT;
    	}).ToList();	
    }
    fonte http://stackoverflow.com/questions/1427484/convert-datatable-to-listt
    sexta-feira, 31 de março de 2017 04:32

Respostas

  • Bom dia,

    Obrigado pela participação no fórum MSDN.

    No seu caso, serviria usar o DataTableExtensions.AsEnumerable e então usar o Enumerable.ToList ?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 31 de março de 2017 12:44
    Moderador

Todas as Respostas

  • Bom dia,

    Obrigado pela participação no fórum MSDN.

    No seu caso, serviria usar o DataTableExtensions.AsEnumerable e então usar o Enumerable.ToList ?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 31 de março de 2017 12:44
    Moderador
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 3 de abril de 2017 20:38
    Moderador