【C#】DataRowをエンティティクラスにマッピングする拡張メソッド
DataRowを操作する時に、クラスマッピングして操作できるようにしてしまおう。
型無し DataRow をデータクラスに変換してみた( VB.NET 版)
アンチ型付DataSet派の自作ORマッピング - 山本大の日記
上記URLの内容を参考に、DataRowをエンティティにマッピングする拡張メソッドを書いた。 (ほぼ同じだけど・・・)
DataRowExtensions.cs
public static class DataRowExtensions { public static T ToEntity<T>(this DataRow row) where T : new() { var resultData = new T(); var t = resultData.GetType(); var pis = t.GetProperties(); foreach (var pi in pis) { pi.SetValue(resultData, row[pi.Name]); } return resultData; } }
MemberData.cs
class MemberData { public int ID { get; set; } = 0; public string Name { get; set; } = ""; }
Form1.cs
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var dt = new DataTable("SampleTable"); dt.Columns.AddRange(new DataColumn[] { new DataColumn("ID", typeof(int)), new DataColumn("Name", typeof(string)) }); dt.Rows.Add(new object[] { 1, "aaa" }); dt.Rows.Add(new object[] { 2, "bbb" }); dt.Rows.Add(new object[] { 3, "ccc" }); foreach (DataRow row in dt.Rows) { var user = row.ToEntity<MemberData>(); Console.WriteLine("ID = {0}, Name = {1}", user.ID, user.Name); } } }