Wie konvertiere ich eine Datentabelle in ein POCO-Objekt in Asp.Net MVC?Wie konvertiere ich eine Datentabelle in ein POCO-Objekt in Asp.Net MVC?
Antwort
Übergeben Sie jede DataRow in den Klassenkonstruktor (oder verwenden Sie getters/setters) und übersetzen Sie jede Spalte in die entsprechende Eigenschaft. Seien Sie vorsichtig mit nullfähigen Spalten, um sie korrekt zu extrahieren.
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: warum müssen Sie immer das gleiche haben Ideen wie ich, und geben Sie 5 Sekunden schneller als ich :-) –
Ich kann Zeit kontrollieren und Gedanken lesen. : -o – tvanfosson
Was ist hier modifiziert? Ich verstehe, dass wir überprüfen sollten, ob ein Wert in der Zeile null ist, bevor Sie den Eigenschaften in der Klasse zuweisen. Aber was meinen Sie als modifiziert? – Josh
Eine Datentabelle enthält normalerweise viele Zeilen - möchten Sie jede Zeile in eine Objektinstanz umwandeln?
In diesem Fall könnten Sie z.B. einen Konstruktor zu Ihrem POCO Objekt hinzufügen, das ein DataRow
als Parameter akzeptiert, und extrahiert dann die Bits und Stücke aus diesen DataRow
:
public YourPOCO(DataRow row)
{
this.Field1 = row["Field1"].ToString();
...
this.FieldN = Convert.ToInt32(row["FieldN"]);
}
und so weiter, und dann auf jedem der Zeilen, die Konstruktor ruft in den DataTable.Rows
Sammlung:
List<YourPOCO> list = new List<YourPOCO>();
foreach(DataRow row in YourDataTable.Rows)
{
list.Add(new YourPOCO(row));
}
und man könnte dann eine ASP.NET MVC-Ansicht oder Teilansicht auf dieser „YourPOCO“ Typ und verwenden Sie die „Liste“ Vorlage basiert erstellen eine Liste von „YourPOCO“ Instanzen in einer Listen- zu erstellen wie Display.
Marc
Danke für die Erwähnung der Liste
Ich sah deine andere Frage über eine Datentabelle in der Datenzugriffsschicht verwendet. Wenn Sie POCO irgendwann zurückgeben, ist es eine gute Idee, dass Ihre DAL POCO bereits zurückgibt.
Sie würden einen SqlDataReader verwenden, um den POCO zu füllen. Dies ist leichter. Manchmal ist es einfacher, DataSet und DataTable für Listen von Einträgen zu verwenden, aber wenn Sie die Zeilen in stark typisierte POCOS transformieren, bin ich mir ziemlich sicher, dass dies der richtige Weg ist.
Alte Frage, jedenfalls kann dies für jemanden nützlich sein:
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;
}
- 1. Kopieren Sie eine Datentabelle in eine andere Datentabelle in asp.net
- 2. Wie konvertiere ich ein HttpRequest in ein HttpRequestBase-Objekt?
- 3. Daten in eine Datentabelle in ASP.NET binden
- 4. Wie konvertiere ich ein HttpStatusCodeResult in ein JsonResult?
- 5. Wie konvertiere ich ein Datum in YYYYMMDD?
- 6. Wie konvertiere ich NaN in eine 0?
- 7. Wie konvertiere ich eine System :: String in ein unsigned char *?
- 8. Wie konvertiere ich ein einzelnes Zeichen in eine Zeichenfolge?
- 9. Rails: Wie konvertiere ich ein Symbol in eine Klasse
- 10. Wie konvertiere ich eine JTextField-Zeichenfolge in ein Double?
- 11. Wie konvertiere ich eine Zeichenfolge in ein Array von Arrays?
- 12. , wie zwei Datentabelle Daten in eine Datentabelle verbinden in einer Gridview in asp.net zeigen
- 13. Wie konvertiere ich Benutzereingaben in eine Liste?
- 14. Wie kann ich ein Objekt in ASP.NET MVC veröffentlichen?
- 15. Wie ein JsonResult in ASP.NET MVC zurückgeben
- 16. Wie kann ich ein DataType.DropDownList Attribut in asp.net MVC erstellen
- 17. Wie erstelle ich ein zweispaltiges Snaking-Layout in ASP.NET MVC?
- 18. Wie kann ich ein Registerkartenmenü in ASP.NET MVC erstellen?
- 19. In ASP.Net MVC 1.0 Wie füge ich untergeordnete Modelldaten ein?
- 20. Wie konvertiere ich eine .docx nach HTML mit asp.net?
- 21. Wie konvertieren CSV zu Datentabelle in C#, mvc
- 22. Wie sortiere ich eine Datentabelle
- 23. Wie benutze ich ein Base ViewModel in Asp.net MVC 2
- 24. Wie konvertiere ich eine Zeichenfolge wie "Red" in eine System.Windows.Media.Color?
- 25. Wie reiche ich deaktivierte Eingaben in ASP.NET MVC ein?
- 26. Wie erstelle ich ein mehrzeiliges Textfeld in asp.net mvc?
- 27. Wie konvertiere ich eine Zeichenfolge in eine Liste in Io?
- 28. Wie konvertiere ich eine Zeichenfolge in eine Ganzzahl in JSonne?
- 29. Wie konvertiere ich eine lange in eine Zeichenfolge in C++?
- 30. Wie zeige ich eine PDF mit PdfSharp in ASP.Net MVC?
Es ist für in asp.net Mvc anzeigt. Bitte sehen Sie diese Frage ... http://stackoverflow.com/questions/1353966/datatable-instead-of-entity-framework-in-asp-net-mvc – Josh