Обновить столбцы в одном объекте LINQ другим объектом LINQ - PullRequest
1 голос
/ 22 октября 2008

У меня есть два объекта 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

Я бы хотел найти способ немного это исправить. Кто-нибудь знает лучший способ сделать то, что мне нужно.

Ответы [ 2 ]

1 голос
/ 22 октября 2008

Я делаю такие вещи, когда создаю экземпляр объекта из шаблона. По сути, у меня есть метод, который перебирает открытые свойства шаблона, находит соответствующее свойство в создаваемом объекте и вызывает установщик свойств для нового объекта, все через отражение.

0 голосов
/ 23 октября 2008

Я еще не проверял это, но это то, что я придумал.

        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

Как я уже сказал, я не проверял это, но я уверен, что оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...