WCF Web服务 - 列表<>返回类型

时间:2010-03-08 16:40:22

标签: c# wcf

List<CertMail> lsRecipetNumber = new List<CertMail>();

CertMail类位于数据访问层,返回List<CertMail>。我需要 将其转换为我的类的对象并返回

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


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

如何将CertMail列表中的所有行添加到CertMailRecieptNumbers并从CertMailRecieptNumbers类返回?

2 个答案:

答案 0 :(得分:2)

如果您只需要从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将遍历项目列表本身,并将其映射应用于每个项目,并将其添加到结果输出列表中。

答案 1 :(得分:0)

如果我理解你的需要,那就是从一个映射到另一个的简单方法。

您需要通过CertMail列表,然后为每个人创建一个新的CertMailReceiptNumbers

实施例

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

return lsReceiptNumber
}

Public CertMailReceiptNumbers convertToCertMailReceiptNumber(CertMail cm) 
{
     var cmrn = new ertMailReceiptNumber();
     cmrn.xxx = cm.xxxx;
     ...;
     return cmrn;
}