1

ユーザーが、FirstName、LastName、Email などのフィールドを含むプロファイル レコードを変更するとします。

変更されたフィールドごとに、変更は次のタイプのリストにキーと値のペアとして保存されます。

List<Tuple<string, object>>

このキーと値のペアのキーは、実際のテーブル列を表します。

レコードを更新しようとしている間、これを行う 1 つの方法を次に示します。

foreach (Tuple<string, object> field in changeList) {
    if (field.Item1.equals("FirstName")) {
        user.FirstName = field.Item2;
    }
    if (field.Item1.equals("Email")) {
       user.Email = field.Item2;
    }
    ...
}

db.SaveChanges()

これを達成するためのより良い方法がなければならないと考えています。

リフレクションを使用して、ユーザーの各プロパティを設定できると思います

foreach(tuple<string, object> field in changeList) {
  user.GetType().InvokeMember(field.Item1,
     BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
     Type.DefaultBinder, user, field.Item2);    
}

もっと良い方法はないかと考えています。おそらく、TryUpdateModel() メソッドも使用できる「var」オブジェクトを動的に作成できます。

4

2 に答える 2

0

1 つの方法は、古い pal ADO.NET を使用することです。

もう 1 つの方法はDynamic LINQです

編集

申し訳ありませんが、Dynamic LINQ はフィルタリングにのみ使用できると思います。ADO.NET が最適なオプションである可能性があります。私はアイデアがありません。

于 2013-10-13T22:15:18.840 に答える