I'm creating a datareader from a SqlCommand
and I currently store this information in a class with the following
private object PopulateObjectWithFields(SqlDataReader read, Type className)
{
var gd = Activator.CreateInstance(className);
for (int i = 0; i < read.FieldCount; i++)
{
var type = gd.GetType();
var fi = type.GetField(read.GetName(i));
if (fi != null)
{
if (!Convert.IsDBNull(read[i]))
{
try
{
fi.SetValue(gd, read[i]);
}
catch
{
throw new Exception(string.Format("Unable to set {0}. Class type {1}. DB Type {2}", read.GetName(i), fi.FieldType.Name, read[i].GetType().Name));
}
}
}
else
{
var pi = type.GetProperty(read.GetName(i));
if (pi != null)
{
if (!Convert.IsDBNull(read[i]))
{
try
{
pi.SetValue(gd, read[i]);
}
catch
{
throw new Exception(string.Format("Unable to set {0}. Class type {1}. DB Type {2}", read.GetName(i), fi.FieldType.Name, read[i].GetType().Name));
}
}
}
}
}
return gd;
}
This works perfectly. What I would like now is to put it in a List<class>
, but I can't seem to get it right to create a List<class>
dynamically.
Can someone maybe help me out with the syntax?
var MyList = List<MyClass> //This should be dynamically created
using(var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
MyList.Add(PopulateObjectWithFields(read, MyClass));
}
}
Aucun commentaire:
Enregistrer un commentaire