Веб-служба WCF - Список <> Тип возврата - PullRequest
0 голосов
/ 08 марта 2010
List<CertMail> lsRecipetNumber = new List<CertMail>();

CertMail класс находится на уровне доступа к данным, который возвращает List<CertMail>. Мне необходимо преобразовать это в объект моего класса и вернуть, что

List<CertMailReceiptNumbers> lsReceiptNumbers = new List<CertMailReceiptNumbers>();


CertMailReceipt.lsCMRN = lsReceiptNumbers; //---- > return this.

Как добавить все строки в списке CertMail в CertMailRecieptNumbers и вернуть его из CertMailRecieptNumbers класса?

Ответы [ 2 ]

2 голосов
/ 08 марта 2010

Если вам нужно сопоставить только от CertMail до CertMailReceipt и оба типа очень похожи, вы можете использовать автоматический помощник, такой как AutoMapper , чтобы помочь вам с отображением.

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

В вашем случае, если два типа несколько похожи, вы можете сделать что-то вроде:

using AutoMapper;

Mapper.CreateMap<CertMail, CertMailReceipt>();

sourceList.ForEach(certMail => 
{
    lsReceiptNumbers.Add(Mapper.Map<CertMail, CertMailReceipt>(certMail))
});

или, если вы предпочитаете:

using AutoMapper;

Mapper.CreateMap<CertMail, CertMailReceipt>();

foreach(certMail cm in sourceList)    
{
    lsReceiptNumbers.Add(Mapper.Map<CertMail, CertMailReceipt>(cm));
}

Это в основном та же идея, о которой упоминал NPayette, просто используя полуавтоматический маппер вместо того, чтобы писать весь процесс картирования самостоятельно.

И если вам повезет (и в зависимости от ваших типов структур данных), вы даже можете воспользоваться преимуществом Automapper, позволяющим даже отображать целые списки из одного типа в другой:

lsReceiptNumbers = Mapper.Map<List<CertMail>,
                              List<CertMailReceipt>>(sourceList);

Automapper сам просматривает список элементов, применяет свое сопоставление к каждому элементу и добавляет их в итоговый список вывода.

0 голосов
/ 08 марта 2010

Если я правильно понимаю вашу потребность, это простой способ отображения одного на другой.

Что ж, вам нужно просмотреть список CertMail, а затем для каждого из них создать новый CertMailReceiptNumbers

Ex.

...
lsReceiptNumber.ForEach(certMail => 
{
    lsReceiptNumbers.Add(convertToCertMailReceiptNumber(certMail));
});

return lsReceiptNumber
}

Public CertMailReceiptNumbers convertToCertMailReceiptNumber(CertMail cm) 
{
     var cmrn = new ertMailReceiptNumber();
     cmrn.xxx = cm.xxxx;
     ...;
     return cmrn;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...