我可以使用LINQ从表中获取列列表:
OrderDataContext ctx = new OrderDataContext();
var cols = ctx.Mapping.MappingSource
.GetModel( typeof( OrderDataContext ) )
.GetMetaType( typeof( ProductInformation ) )
.DataMembers;
这给了我列的列表,所以我可以这样做:
foreach ( var col in cols )
{
// Get the value of this column from another table
GetPositionForThisField( col.Name );
}
所以这一切都有效,我可以遍历列列表并从另一个表中提取这些列的值(因为列名是另一个表中的键),所以我不必进行切换.. ..或许......如果......那么......
现在的问题是:
获取这些值后,如何填充实体以便将其保存?我通常会这样:
ProductInformation info = new ProductInformation();
info.SomeField1 = val1;
info.SomeField2 = val2;
ctx.ProductInformation.InsertOnSubmit( info );
ctx.SubmitChanges();
但是当没有这样的东西时,如何使用上面相同的列集合来填充列,当没有这样的东西时:
info["field1"].Value = val1;
感谢。
答案 0 :(得分:0)
只需获取要修改的对象,设置属性并调用SubmitChanges。无需创建新对象并插入它。 Context会跟踪您更改的属性并相应地生成更新语句。在您的情况下,您可能希望通过反射而不是手动设置属性,因为您正在从另一个表中读取它们。
答案 1 :(得分:0)
你需要使用反射。假设您可以从元数据中获取PropertyInfo
:
PropertyInfo property = GetPropertyForThisField(col.Name);
property.SetValue(info, val1, null);