使用另一个LINQ对象更新一个LINQ对象中的列

时间:2008-10-21 23:34:23

标签: vb.net linq-to-sql

我有两个具有完全相同列的LINQ对象,我希望能够使用另一个的字段更新一个。我首先从文件中的某些数据创建一个新对象,然后在数据库中查询具有相同ID的现有项目。我希望能够做的是使用新创建的对象详细信息更新现有对象详细信息。

到目前为止,我一直在做的方法是列出所有列并手动更新它们,但正如您所看到的,这可能会导致维护问题。

 With OldCaller
            .ADDRESS = NewCaller.ADDRESS
            .COMPANY = NewCaller.COMPANY
            .CONTACT_HOURS = NewCaller.CONTACT_HOURS
            .CONTACT_NAME = NewCaller.CONTACT_NAME
            .CUSTOMER_ID = NewCaller.CUSTOMER_ID
            .EMAIL_ADDRESS = NewCaller.EMAIL_ADDRESS
            .FAX_NUMBER = NewCaller.FAX_NUMBER
            .FAX_TYPE = NewCaller.FAX_TYPE
            .MOBILE = NewCaller.MOBILE
            .POSTCODE = NewCaller.POSTCODE
            .PUBLIC_ADDRESS = NewCaller.PUBLIC_ADDRESS
            .PUBLIC_TELEPHONE = NewCaller.PUBLIC_TELEPHONE
            .STATE = NewCaller.STATE
            .SUBURB = NewCaller.SUBURB
            .TELEPHONE = NewCaller.TELEPHONE
        End With

我希望能够找到一种方法来清理它。有没有人知道做我需要的更好的方法。

2 个答案:

答案 0 :(得分:1)

当我从模板创建对象的实例时,我会这样做。基本上我有一个方法迭代模板的公共属性,在正在创建的对象中找到相应的属性,并通过反射调用新对象上的属性setter。

答案 1 :(得分:0)

我还没有测试过这个,但这就是我想出来的。

        Dim _OldCallerProperties = OldCaller.GetType().GetProperties(Reflection.BindingFlags.Public)
        Dim _NewCallerProperties = NewCaller.GetType.GetProperties(Reflection.BindingFlags.Public)

        For Each Prop In _OldCallerProperties
           Dim _matchingProperty = _NewCallerProperties.Where(Function(p) p.Name = Prop.Name).FirstOrDefault
           Dim _newvalue = _matchingProperty.GetValue(_matchingProperty, Nothing)
           Prop.SetValue(Prop, _newvalue, Nothing)
        Next

就像我说过我没有测试过,但我确信它应该有用。