Как преобразовать объект datatable в объект POCO в Asp.Net MVC?Как преобразовать datatable в объект POCO в Asp.Net MVC?
ответ
Передайте каждый DataRow в конструктор класса (или используйте геттеры/сеттеры) и переведите каждый столбец в соответствующее свойство. Будьте осторожны с нулевыми столбцами, чтобы их правильно извлечь.
public class POCO
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime? Modified { get; set; }
...
public POCO() { }
public POCO(DataRow row)
{
this.ID = (int)row["id"];
this.Name = (string)row["name"];
if (!(row["modified"] is DBNull))
{
this.Modified = (DateTime)row["modified"];
}
...
}
}
@tvanfosson: почему вы всегда должны иметь одинаковые идеи, как я, и типа 5 секунд быстрее меня :-) –
Я могу контролировать время и читать мысли. : -o – tvanfosson
Что здесь изменяется? Я понимаю, что мы должны проверить, имеет ли значение в строке значение null, прежде чем назначать свойства в классе. Но, на что вы ссылаетесь, как измененный? – Josh
Таблица данных обычно содержит много строк - вы хотите преобразовать каждую строку в экземпляр объекта?
В этом случае вы можете, например, добавить конструктор к объекту POCO, который будет принимать DataRow
в качестве параметра, а затем извлекает биты и куски из этого DataRow
:
public YourPOCO(DataRow row)
{
this.Field1 = row["Field1"].ToString();
...
this.FieldN = Convert.ToInt32(row["FieldN"]);
}
и так далее, а затем вызвать этот конструктор по каждой из строк в DataTable.Rows
коллекция:
List<YourPOCO> list = new List<YourPOCO>();
foreach(DataRow row in YourDataTable.Rows)
{
list.Add(new YourPOCO(row));
}
и вы могли бы создать представление ASP.NET MVC или частичное представление, основанное на этом типе «YourPOCO» и использовать «List» шаблон для создания списка экземпляров «YourPOCO» в list- подобный дисплей.
Марк
Спасибо, что упомянул Список
Я видел ваш другой вопрос об использовании DataTable в слое доступа к данным. Если вы вернете POCO в какой-то момент, это хорошая идея, чтобы позволить вашему DAL возвратить POCO уже.
Вы должны использовать SqlDataReader для заполнения POCO. Это более легкий вес. Иногда его проще использовать DataSet и DataTable для списков записей, но если вы транслируете строки в строго типизированный POCOS, в любом случае, я довольно уверен, что это путь.
Старый вопрос, во всяком случае, это может быть полезным для кого-то:
private static T CreatePocoObject<T>(DataRow dr) where T : class, new()
{
try
{
T oClass = new T();
Type tClass = typeof (T);
MemberInfo[] methods = tClass.GetMethods();
ArrayList aMethods = new ArrayList();
object[] aoParam = new object[1];
//Get simple SET methods
foreach (MethodInfo method in methods)
{
if (method.DeclaringType == tClass && method.Name.StartsWith("set_"))
aMethods.Add(method);
}
//Invoke each set method with mapped value
for (int i = 0; i < aMethods.Count; i++)
{
try
{
MethodInfo mInvoke = (MethodInfo)aMethods[i];
//Remove "set_" from method name
string sColumn = mInvoke.Name.Remove(0, 4);
//If row contains value for method...
if (dr.Table.Columns.Contains(sColumn))
{
//Get the parameter (always one for a set property)
ParameterInfo[] api = mInvoke.GetParameters();
ParameterInfo pi = api[0];
//Convert value to parameter type
aoParam[0] = Convert.ChangeType(dr[sColumn], pi.ParameterType);
//Invoke the method
mInvoke.Invoke(oClass, aoParam);
}
}
catch
{
System.Diagnostics.Debug.Assert(false, "SetValuesToObject failed to set a value to an object");
}
}
return oClass;
}
catch
{
System.Diagnostics.Debug.Assert(false, "SetValuesToObject failed to create an object");
}
return null;
}
Источник является http://blog.developers.ie/cgreen/archive/2007/09/14/using-reflection-to-copy-a-datarow-to-a-class.aspx
- 1. как преобразовать объект [] в DataTable
- 2. Как преобразовать DataTable/DataSet в объект ObjectDataSource
- 3. Как преобразовать объект [,] в datatable в C#
- 4. Как преобразовать выпадающий список в пользовательский объект в ASP.NET MVC?
- 5. Как преобразовать объект JSON в класс в Asp.Net MVC
- 6. MVC DataTable сложный объект
- 7. ASP.NET MVC: как преобразовать View Model в объект Json
- 8. Как преобразовать json в datatable?
- 9. Невозможно преобразовать объект poco из EF 4 в JSON
- 10. Попытка преобразовать объект JSON в DataTable
- 11. Как использовать POCO в приложении MVC
- 12. Как можно преобразовать форму в ASP.NET MVC?
- 13. Ошибка ASP.NET MVC Невозможно неявно преобразовать тип datamodel в объект
- 14. Как преобразовать csv в datatable в C#, mvc
- 15. как преобразовать данные, используя ссылочный datatable asp.net
- 16. Как преобразовать объект в сериализованный объект в контроллерах MVC
- 17. DataTable вместо структуры Entity в Asp.Net MVC
- 18. ASP.NET MVC POCO классы и проверка
- 19. Как проверить объект POCO
- 20. Как stringfy объект POCO
- 21. объект DateTime в ASP.NET MVC
- 22. Преобразование DataTable в объект [,]
- 23. ASP.NET MVC/EF4/POCO/Repository - как обновлять отношения?
- 24. Резидентный объект в asp.net mvc
- 25. Как преобразовать DataSet в DataTable в C#
- 26. Как преобразовать IQueryable в DataTable
- 27. Как преобразовать DataSet в DataTable
- 28. Как преобразовать datatable в xml?
- 29. как преобразовать datarow в datatable
- 30. Как преобразовать список в DataTable
Это для отображения в ASP.NET MVC. Пожалуйста, ознакомьтесь с этим вопросом ... http://stackoverflow.com/questions/1353966/datatable-instead-of-entity-framework-in-asp-net-mvc – Josh