2008-10-21 8 views
1

J'ai deux objets LINQ qui ont exactement les mêmes colonnes et j'aimerais pouvoir en mettre un à jour avec les champs de l'autre. Je crée d'abord un nouvel objet à partir de certaines données dans un fichier, puis j'interroge la base de données pour un élément existant avec le même ID. Ce que j'aimerais pouvoir faire, c'est mettre à jour les détails des objets existants avec les détails des objets nouvellement créés. Jusqu'à présent, la façon dont je l'ai fait est de lister toutes les colonnes et de les mettre à jour manuellement, mais comme vous pouvez le voir, cela peut causer des problèmes de maintenance.Mise à jour de colonnes dans un objet LINQ avec un autre objet 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 

Je voudrais être en mesure de trouver un moyen de nettoyer un peu. Est-ce que quelqu'un sait d'une meilleure façon de faire ce dont j'ai besoin.

Merci.

Répondre

1

Je fais ce genre de chose quand je crée une instance d'un objet à partir d'un modèle. Fondamentalement, j'ai une méthode qui itère sur les propriétés publiques du modèle, trouve la propriété correspondante dans l'objet en cours de création, et appelle l'accesseur de propriété sur le nouvel objet, le tout par l'intermédiaire de la réflexion.

0

Je ne l'ai pas encore testé mais c'est ce que j'ai imaginé.

 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 

Comme je l'ai dit je ne l'ai pas testé mais je suis sûr que cela devrait fonctionner.

Questions connexes