Usuário com melhor resposta
Optimização classe genérica conversão de DataTable para List<T>

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
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.
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 3 de abril de 2017 20:38
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.
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 3 de abril de 2017 20:38
-
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.