委任反射によるDataTableのソリッドセットへの変換
8116 ワード
クラス汎用制約:
委任の定義:
委任メソッドの作成:
反射と委任を使用して、DataTableをエンティティセットに変換します.
このように問題を書くのは、定義されたパラメータを依頼するときにstringタイプがあるため、私たちのエンティティにintやDateTimeタイプがある可能性があるため、汎用的な依頼が必要です.
委任を定義する場合は、次の手順に従います.
委任メソッドの作成(ここで問題があり、どのように処理するか分かりません):
反射と委任を使用して、DataTableをエンティティセットに変換します.
ずっと疑問に思って、誰かが私に疑問を解決してくれることを望んで、直接反射する方法は私もありますが、この問題は解決しないで、心の中はずっとしこりがあって、誰かが助けてくれることを望んで、ありがとうございます!
1 public static class ToModel<T> where T : class, new()
委任の定義:
1 public delegate void SetString(string value);
委任メソッドの作成:
1 private static SetString CreateStringDelegate(T model, string propertyName)
2 {
3 MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
4 Type type = typeof(SetString);
5 return Delegate.CreateDelegate(type, model, mi) as SetString;
6 }
反射と委任を使用して、DataTableをエンティティセットに変換します.
1 public static IList<T> GetDelegate_ToModelList(DataTable dt)
2 {
3 IList<T> list = new List<T>();
4 if (dt == null || dt.Rows.Count < 1) return list;
5 SetString setDelegateString;
6 foreach (DataRow dr in dt.Rows)
7 {
8 T model = new T();
9 foreach (DataColumn dc in dt.Columns)
10 {
11 setDelegateString = CreateStringDelegate(model, dc.ColumnName);
12 setDelegateString(dr[dc.ColumnName].ToString());
13 }
14 list.Add(model);
15 }
16 return list;
17 }
このように問題を書くのは、定義されたパラメータを依頼するときにstringタイプがあるため、私たちのエンティティにintやDateTimeタイプがある可能性があるため、汎用的な依頼が必要です.
委任を定義する場合は、次の手順に従います.
1 public delegate void SetString<PT>(PT value)
委任メソッドの作成(ここで問題があり、どのように処理するか分かりません):
1 private static SetString CreateStringDelegate(T model, string propertyName)
2 {
3 MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
4 Type type = typeof(model).GetProperty(propertyName).PropertyType;
5 return Delegate.CreateDelegate(type, model, mi) as SetString<type>;
6 }
反射と委任を使用して、DataTableをエンティティセットに変換します.
1 public static IList<T> GetDelegate_ToModelList(DataTable dt)
2 {
3 IList<T> list = new List<T>();
4 if (dt == null || dt.Rows.Count < 1) return list;
5 foreach (DataRow dr in dt.Rows)
6 {
7 T model = new T();
8 foreach (DataColumn dc in dt.Columns)
9 {
10 SetString<typeof(T).GetProperty(dc.ColumnName).PropertyType> setDelegateString = CreateStringDelegate(model, dc.ColumnName);
11 setDelegateString(dr[dc.ColumnName].ToString());
12 }
13 list.Add(model);
14 }
15 return list;
16 }
ずっと疑問に思って、誰かが私に疑問を解決してくれることを望んで、直接反射する方法は私もありますが、この問題は解決しないで、心の中はずっとしこりがあって、誰かが助けてくれることを望んで、ありがとうございます!