Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射到元组,第一个元素是list,第二个元素是simple属性_C#_.net_.net Core_Automapper - Fatal编程技术网

C# 自动映射到元组,第一个元素是list,第二个元素是simple属性

C# 自动映射到元组,第一个元素是list,第二个元素是simple属性,c#,.net,.net-core,automapper,C#,.net,.net Core,Automapper,我需要映射此结果,但出现错误: AutoMapper.AutoMapperConfigurationException:“成员的自定义配置仅支持类型上的顶级单个成员。” public class ResponseModel { public int TotalPageCount { get; set; } public IEnumerable<ExternalAPIResponseModel> ExternalAPIResponse { get

我需要映射此结果,但出现错误: AutoMapper.AutoMapperConfigurationException:“成员的自定义配置仅支持类型上的顶级单个成员。”

public class ResponseModel
    {
        public int TotalPageCount { get; set; }
        public IEnumerable<ExternalAPIResponseModel> ExternalAPIResponse { get; set; } = new List<ExternalAPIResponseModel>();
    }


 public class ExternalAPIResponseModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string JobFunction { get; set; }
        public string JobLevel { get; set; }
        public string CompanyName { get; set; }
        public string State { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
        public string Address { get; set; }
    }


 public class Contact
    {
        public int Ocid { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        // etc.
    }

 
//I know the mistake is here
CreateMap<(IEnumerable<Contact> Contacts, int pagesCount), ResponseModel>()
               .ForMember(dest => dest.ExternalAPIResponse.Select( x=>new {
                       x.Address,
                       x.CompanyName,
                       x.FirstName,
                       x.LastName,
                       x.JobFunction,
                       x.JobLevel,
                       x.Email,
                       x.Phone,
                       x.State
                   }),
                   
                    opt => opt.MapFrom(src => src.Contacts.Select(c=> new { 
                    c.ContactAddress1,
                    c.HqcompanyName,
                    c.FirstName,
                    c.LastName,
                    c.IdjobFunctionNavigation.JobFunction1,
                    c.IdjobLevelNavigation.JobLevel1,
                    c.Email,
                    c.ContactPhone,
                    c.ContactState })))
                         
               .ForMember(dest => dest.TotalPageCount, opt => opt.MapFrom(src => src.pagesCount));
   
    //I call it from conntroller like this 
    var mappedResult = _mapper.Map<ResponseModel>(result);

公共类响应模型
{
公共int TotalPageCount{get;set;}
public IEnumerable ExternalAPIResponse{get;set;}=new List();
}
公共类外部APIResponseModel
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串作业函数{get;set;}
公共字符串JobLevel{get;set;}
公共字符串CompanyName{get;set;}
公共字符串状态{get;set;}
公共字符串电子邮件{get;set;}
公用字符串电话{get;set;}
公共字符串地址{get;set;}
}
公共类联系人
{
公共内部Ocid{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
//等等。
}
//我知道错在这里
CreateMap()
.ForMember(dest=>dest.externalapisresponse.Select(x=>new{
x、 地址:,
x、 公司名称,
x、 名字,
x、 姓,
x、 工作职能,
x、 职位级别,
x、 电子邮件,
x、 电话,
x、 陈述
}),
opt=>opt.MapFrom(src=>src.Contacts.Select(c=>new{
c、 联系地址1,
c、 HqcompanyName,
c、 名字,
c、 姓,
c、 IdjobFunctionNavigation.JobFunction1,
c、 IdjobLevelNavigation.JobLevel1,
c、 电子邮件,
c、 联络电话,
c、 ContactState}(0)
.FormMember(dest=>dest.TotalPageCount,opt=>opt.MapFrom(src=>src.pageScont));
//我从康特罗尔那里这样称呼它
var mappedResult=\u mapper.Map(结果);
如何将(IEnumerable Contacts,int pagesont)映射到ResponseModel以避免出错?

使用
元组
,然后将其映射到
ResponseModel

映射器

CreateMap()
.ForMember(dest=>dest.FirstName,opt=>opt.MapFrom(source=>source.FirstName))
.ForMember(dest=>dest.LastName,opt=>opt.MapFrom(source=>source.LastName))
.ForMember(dest=>dest.CompanyName,opt=>opt.MapFrom(source=>source.HqcompanyName))
.ForMember(dest=>dest.Address,opt=>opt.MapFrom(source=>source.ContactAddress1))
.FormMember(dest=>dest.JobFunction,opt=>opt.MapFrom(source=>source.IdjobFunctionNavigation.JobFunction1))
.FormMember(dest=>dest.JobLevel,opt=>opt.MapFrom(source=>source.IdjobLevelNavigation.JobLevel1))
.ForMember(dest=>dest.Email,opt=>opt.MapFrom(source=>source.Email))
.ForMember(dest=>dest.Phone,opt=>opt.MapFrom(source=>source.ContactPhone))
.ForMember(dest=>dest.State,opt=>opt.MapFrom(source=>source.ContactState));
CreateMap()
.FormMember(dest=>dest.externalapisresponse,opt=>opt.MapFrom(source=>source.Item1))
.FormMember(dest=>dest.TotalPageCount,opt=>opt.MapFrom(source=>source.Item2));
在控制器中

int-pageScont=10;
IEnumerable contacts=GetListOfContacts(PageScont);
Tuple result=Tuple.Create(联系人,页面搜索);
var mappedResult=\u mapper.Map(结果);

是否确实要
IEnumerable
?我觉得你只需要
ResponseModel
,因为它有
IEnumerable
,它将从
IEnumerable
映射到
?它是
元组
还是
IEnumerable
或其他?这是手动映射,不需要AM@LucianBargaoanu“当我想摆脱无聊的左侧和右侧代码时,我使用AutoMapper。如果复制数据的逻辑不完全清晰,我将返回手动映射。”-来自您自己的Jimmy Bogard的话…是的,但这不是简单的手动映射,它通过不正确地使用AM而变得模糊,两个世界中最糟糕的:)在某些情况下,我们不得不像这样使用Automapper来保持与设计的一致性。。。如果还有99种其他情况,我们可以利用AutoMapper功能,但有一种情况我们不能利用,那就好了。类型转换器在这种情况下工作得最好。