データテーブルをAsp.Net MVCのPOCOオブジェクトに変換するにはどうすればよいですか?データテーブルをAsp.Net MVCのPOCOオブジェクトに変換するにはどうすればよいですか?
答えて
各DataRowをクラスコンストラクタに渡すか(またはgetters/settersを使用)、各列を対応するプロパティに変換します。それらを正しく抽出するには、NULL可能な列に注意してください。
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
通常、データテーブルには多くの行が格納されます。各行をオブジェクトインスタンスに変換しますか?
この場合、たとえばパラメータとしてDataRow
を受け入れるあなたのPOCOオブジェクトにコンストラクタを追加し、その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));
}
そして、あなたは、この「YourPOCO」タイプに基づいてASP.NET MVCのビューまたは部分図を作成し、リスト - に「YourPOCO」インスタンスのリストを作成するには、「リスト」テンプレートを使用することができます表示されます。
マルク・
リスト
私は、データアクセス層でデータテーブルを使用についてあなたの他の質問を見ました。 POCOを返す場合は、DOCにPOCOを返すようにしてください。
POCOにはSqlDataReaderを使用します。これはより軽量です。ときには、DataSetとDataTableをListの項目に使用する方が簡単ですが、行をストロングタイプの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;
}
ソースは、それはasp.netのMVCでの表示のためだhttp://blog.developers.ie/cgreen/archive/2007/09/14/using-reflection-to-copy-a-datarow-to-a-class.aspx
- 1. ASP.NET MVC 2アプリケーションをMVC 3に手動で変換するにはどうすればよいですか?
- 2. linqオブジェクトをasp.netオブジェクトに変換するにはどうすればいいですか?
- 3. asp.net mvc(nhibernate)のオブジェクトの変更をどのように追跡すればよいですか?
- 4. これをMVC 3に変換するにはどうすればよいですか?
- 5. asp.net MVCコントローラから非MVC asp.netページにデータをPOSTするにはどうすればよいですか?
- 6. ASP.NET MVCでETagsをサポートするにはどうすればよいですか?
- 7. ASP.NET MVCビューでページタイトルを設定するにはどうすればよいですか? ASP.NET MVCのビューで
- 8. ASP.NET MVCのSelectListで使用するEntityCollection型のオブジェクトを返すにはどうすればよいですか?
- 9. Java:FileオブジェクトをJavaのStringオブジェクトに変換するにはどうすればよいですか?
- 10. オブジェクトを別のオブジェクトに変換するにはどうすればよいですか?
- 11. [オブジェクト、オブジェクト]の配列をhtml()に変換するにはどうすればよいですか?
- 12. Javaイテレータのようなオブジェクトをクロージャシーケンスに変換するにはどうすればいいですか
- 13. ASP.NET MVCの日付をUTCからローカルに変換できないようにするにはどうすればよいですか?
- 14. ASP.NET MVCにオブジェクトを投稿するにはどうすればよいですか?
- 15. Java DateオブジェクトをJRuby Timeオブジェクトに変換するにはどうすればよいですか?
- 16. VIewModelのコンストラクタにオブジェクトを渡すにはどうすればよいですか? ASP.NET MVC 3、Ninject
- 17. データテーブルをオブジェクトに変換する方法
- 18. Javascriptでは、日付オブジェクトをエポックタイムスタンプに変換するにはどうすればよいですか?
- 19. wchar_t *をwstringに変換するにはどうすればよいですか?
- 20. オーディオをテキストに変換するにはどうすればよいですか?
- 21. ソフトウェアアプリケーションをソフトウェアアプライアンスに変換するにはどうすればよいですか?
- 22. JSONArrayをJSONObjectに変換するにはどうすればよいですか?
- 23. byte []をBitmapに変換するにはどうすればよいですか?
- 24. SqlXmlをXmlTextに変換するにはどうすればよいですか?
- 25. LFをCRLFに変換するにはどうすればよいですか?
- 26. ハッシュタグテキストをハッシュタグハイパーリンクに変換するにはどうすればよいですか?
- 27. UTCをDateTimeに変換するにはどうすればよいですか?
- 28. string []をArrayListに変換するにはどうすればよいですか?
- 29. NSStringをNSDateに変換するにはどうすればよいですか?
- 30. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
です。この質問を参照してください... http://stackoverflow.com/questions/1353966/datatable-instead-of-entity-framework-in-asp-net-mvc – Josh