2008-10-21 186 views
1

我有兩個具有完全相同列的LINQ對象,我希望能夠使用另一個LINQ對象的字段進行更新。我首先從文件中的一些數據創建一個新對象,然後查詢數據庫中現有的具有相同ID的項目。我希望能夠做的是用新創建的對象細節更新現有的對象細節。使用另一個LINQ對象更新一個LINQ對象中的列

到目前爲止,我一直在做的方式是列出所有列並手動更新它們,但正如您所看到的,這可能會導致維護工作頭疼。

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 

我想能夠找到一種方法來清理這一點。有誰知道更好的方式來做我需要的東西。

謝謝。

回答

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 

就像我說的我沒有測試過,但我確定它應該工作。

相關問題