1

そこで、items テーブルの特定のフィールドを更新したいと思います。

internal void FieldsUpdate(string id, System.Collections.Hashtable fieldsWithChanges, List<string> keysToUpdate)
{
    using (DBDataContext db = new DBDataContext())
    {
        item myItem = db.items.Single(t=>t.id==id);
        keysToUpdate.ForEach(key => {
            myItem[key] = GetValue(fieldsWithChanges, key).ToString(); 
            //Or something like that, I'm inventing that index 
        });
        db.SubmitChanges();
    }
}

myItem[key]存在しないので、どうすればいいですか?

これは私が知っているひどいオプションです:

internal void FieldsUpdate(string id, System.Collections.Hashtable fieldsWithChanges, List<string> keysToUpdate)
{
    using (DBDataContext db = new DBDataContext())
    {
        item myItem = db.items.Single(t=>t.id==id);
        keysToUpdate.ForEach(key => {
            if (key=="thisKey")
                myItem.thisKey = GetValue(fieldsWithChanges, key).ToString(); 
                // really awful. So What this condition for every colname? thats unsustainable.
        });
    }
    db.SubmitChanges();
}
4

1 に答える 1

3

これは、リフレクションを使用してプロパティ値を設定することで実現できます。

internal void FieldsUpdate(string id, System.Collections.Hashtable fieldsWithChanges, List<string> keysToUpdate)
{
    using (DBDataContext db = new DBDataContext())
    {
        item myItem = db.items.Single(t=>t.id==id);
        keysToUpdate.ForEach(key => {
            typeof(item).GetProperty(key)
                .SetValue(item, GetValue(fieldsWithChanges, key), null);
        });
        db.SubmitChanges();
    }
}

これは、最もパフォーマンスの高いソリューションではありません。

これが維持する必要があるパターンである場合は、コード生成を検討することをお勧めします。

于 2013-07-31T21:10:08.850 に答える