Linq2sql表:列出<fieldname>作为参数</fieldname>

时间:2013-07-31 20:51:55

标签: c# linq tsql linq-to-sql

所以,我想更新项目表的某些字段:

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();
}

1 个答案:

答案 0 :(得分: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();
    }
}

这不是最有效的解决方案。

如果这是您需要维护的模式,我建议您查看代码生成。