如何使用自动映射器映射两个列表?
How to map two list with automapper?
我有两个 类 在不同的位置。
namespace IVR.MyEndpointApi.POCO
{
[Table("MyServiceUrl")]
public class MyURL
{
[Key]
[Column("FacilityID")]
public int FacilityId { get; set; }
[Column("Url")]
public string Url { get; set; }
}
}
namespace OpsTools.Models
{
public class MyServiceEndpoint
{
public int FacilityId { get; set; }
public string Url { get; set; }
}
}
在另一种方法中,我获取了列表并想将其转换为 return 所需的类型。我手动做如下:
public List<MyServiceEndpoint> GetAllUrls()
{
var management = GetMyEndpointManagement();
var list = management.GetAllUrls();
var urlList = new List<MyServiceEndpoint>();
foreach (var item in list)
{
// the type of item is MyURL
var MyUrl = new MyServiceEndpoint();
myUrl.FacilityId = item.FacilityId;
myUrl.Url = item.Url;
urlList.Add(myUrl);
}
return urlList;
}
我的问题:我可以对其应用 AutoMapper 吗?
编辑:
我使用了代码:
var myUrls = management.GetAllUrls();
var urlList = new List<MyServiceEndpoint>();
Mapper.CreateMap<MyServiceEndpoint, MyURL>();
urlList = Mapper.Map<List<MyServiceEndpoint>, List<MyURL>>(myUrls);
Mapper.AssertConfigurationIsValid();
但是,它有错误:
Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.List' to ....
糟糕,加油。我改变了顺序,然后就可以了。
来自
urlList = Mapper.Map<List<MyServiceEndpoint>, List<MyURL>>(myUrls);
到
urlList = Mapper.Map<List< List<MyURL>,MyServiceEndpoint>>(myUrls);
如果您检查实际的异常(您忽略了相关部分),您会看到 Mapper.Map<TSource, TDestination>()
尝试映射到错误的类型。
完整错误将显示为:
cannot convert from System.Collections.Generic.List<MyURL>
to System.Collections.Generic.List<MyServiceEndpoint>
这意味着调用实际上会尝试映射 from List<MyServiceEndpoint>
,需要该类型的参数,而您的源列表不是。
只需在 Map()
调用中切换类型:
urlList = Mapper.Map<List<MyURL>, List<MyServiceEndpoint>>(myUrls);
或者完全删除新列表创建,移动声明并使用类型推断:
var urlList = Mapper.Map<List<MyServiceEndpoint>>(myUrls);
我有两个 类 在不同的位置。
namespace IVR.MyEndpointApi.POCO
{
[Table("MyServiceUrl")]
public class MyURL
{
[Key]
[Column("FacilityID")]
public int FacilityId { get; set; }
[Column("Url")]
public string Url { get; set; }
}
}
namespace OpsTools.Models
{
public class MyServiceEndpoint
{
public int FacilityId { get; set; }
public string Url { get; set; }
}
}
在另一种方法中,我获取了列表并想将其转换为 return 所需的类型。我手动做如下:
public List<MyServiceEndpoint> GetAllUrls()
{
var management = GetMyEndpointManagement();
var list = management.GetAllUrls();
var urlList = new List<MyServiceEndpoint>();
foreach (var item in list)
{
// the type of item is MyURL
var MyUrl = new MyServiceEndpoint();
myUrl.FacilityId = item.FacilityId;
myUrl.Url = item.Url;
urlList.Add(myUrl);
}
return urlList;
}
我的问题:我可以对其应用 AutoMapper 吗?
编辑:
我使用了代码:
var myUrls = management.GetAllUrls();
var urlList = new List<MyServiceEndpoint>();
Mapper.CreateMap<MyServiceEndpoint, MyURL>();
urlList = Mapper.Map<List<MyServiceEndpoint>, List<MyURL>>(myUrls);
Mapper.AssertConfigurationIsValid();
但是,它有错误:
Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.List' to ....
糟糕,加油。我改变了顺序,然后就可以了。
来自
urlList = Mapper.Map<List<MyServiceEndpoint>, List<MyURL>>(myUrls);
到
urlList = Mapper.Map<List< List<MyURL>,MyServiceEndpoint>>(myUrls);
如果您检查实际的异常(您忽略了相关部分),您会看到 Mapper.Map<TSource, TDestination>()
尝试映射到错误的类型。
完整错误将显示为:
cannot convert from
System.Collections.Generic.List<MyURL>
toSystem.Collections.Generic.List<MyServiceEndpoint>
这意味着调用实际上会尝试映射 from List<MyServiceEndpoint>
,需要该类型的参数,而您的源列表不是。
只需在 Map()
调用中切换类型:
urlList = Mapper.Map<List<MyURL>, List<MyServiceEndpoint>>(myUrls);
或者完全删除新列表创建,移动声明并使用类型推断:
var urlList = Mapper.Map<List<MyServiceEndpoint>>(myUrls);