我从客户端回发中收到两个匹配'fieldname'和'value'的变量。 fieldname可以是db表列中的50个字段之一。
我如何使用反射来识别哪个回发字段名与表中的字段匹配,然后使用LINQ更新传回的值更新该单个字段?
(string fieldid, string fieldvalue)
更新: 我看过Dynamically select and update a column value in LINQ resultset
而不是在页面上设置特定的TExtBox,我需要写回db的反射变量字段的值?这是我希望了解更多信息的地方。
答案 0 :(得分:1)
如果在编译类型中既不知道源名称也不知道目标名称,那么您可以使用反射来读取和设置值,例如
public void SetField<T1, T2>(T1 destination, string destinationFieldName,
T2 source , string sourceFieldName)
{
FieldInfo destFi = typeof(T1).GetField(destinationFieldName);
FieldInfo sourceFi = typeof(T2).GetField(sourceFieldName);
if (sourceFi != null && destFi != null)
destFi.SetValue(destination, sourceFi.GetValue(source));
}
然后,如果您尝试将名为NewName的字段从设置(这是名为Settings的类的实例)复制到Table1类型的记录的列名,那么您可以这样做:
SetField<Table1, Settings<(record , "Name" , settings , "NewName");
如果您使用的是属性而不是字段,那么您需要使用PropertyInfo而不是FieldInfo
public void SetProperty<T1, T2>(T1 destination, string destinationFieldName,
T2 source, string sourceFieldName)
{
PropertyInfo destPi = typeof(T1).GetProperty(destinationFieldName);
PropertyInfo sourcePi = typeof(T2).GetProperty(sourceFieldName);
if (sourcePi != null && destPi != null)
destPi.SetValue(destination, sourcePi.GetValue(source , null) , null);
}
显然,使用类似的东西可以打击性能。