使用LINQ更新迭代col列表的实体列

时间:2011-08-29 21:59:40

标签: linq linq-to-sql

我可以使用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;

感谢。

2 个答案:

答案 0 :(得分:0)

只需获取要修改的对象,设置属性并调用SubmitChanges。无需创建新对象并插入它。 Context会跟踪您更改的属性并相应地生成更新语句。在您的情况下,您可能希望通过反射而不是手动设置属性,因为您正在从另一个表中读取它们。

答案 1 :(得分:0)

你需要使用反射。假设您可以从元数据中获取PropertyInfo

PropertyInfo property = GetPropertyForThisField(col.Name);
property.SetValue(info, val1, null);