我有一个具有完全相同的列中的两个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
我希望能够找到一种方法来清理这个了一下。有谁知道一个更好的方式做我所需要的。
当我从模板创建一个对象的实例我这样做这样的事情。基本上我有在模板的公共属性迭代,发现在正在创建的对象的相应属性,并调用新对象的属性setter,所有这些都通过反射的方法。
我没有测试尚未但这是我想出了。
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
就像我说我没有测试过,但我敢肯定它应该工作。