C# Automapper说System.String到System.Char的映射缺失?但我看不到Char属性

C# Automapper说System.String到System.Char的映射缺失?但我看不到Char属性,c#,automapper,C#,Automapper,我有三门课: public class UserReport : Entity { public string Name { get; set; } public string Email { get; set; } public List<string> Departments { get; set; } public List<string> Titles { get; set; } } public abstract class E

我有三门课:

public class UserReport : Entity
{
    public string Name { get; set; }
    public string Email { get; set; }
    public List<string> Departments { get; set; }
    public List<string> Titles { get; set; }
}

public abstract class Entity
{
    public Guid Id { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateLastModified { get; set; }
    public string CreatedBy { get; set; }
    public string LastModifiedBy { get; set; }
    public bool Active { get; set; }

    protected Entity()
    {
        DateCreated = DateTime.Now;
        DateLastModified = DateTime.Now;
        Id = Guid.NewGuid();
    }
}

public class UserModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string Departments { get; set; }
    public string Titles { get; set; }
}
然后它说:

参数类型不匹配

进一步的研究表明,这是可行的:

Mapper.Map<List<TReport>, List<TModel>>(_reportService.GetReportBaseQuery().ToList());
Mapper.Map(_reportService.GetReportBaseQuery().ToList());

但我不能使用它,因为我需要它是一个可查询的返回。所以当我尝试做EF投影时,有些事情是不同的,但不确定那是什么。将select语句从一个编写到另一个很容易,但这不是通用的和可重用的。

解决方案是为
部门
标题
字段显式设置映射:

CreateMap<UserReport, UserModel>()
    .ForMember(x => x.Departments, o => o.MapFrom(s => string.Join("\n", s.Departments)))
    .ForMember(x => x.Titles, o => o.MapFrom(s => string.Join("\n", s.Titles)));
CreateMap()
.ForMember(x=>x.Departments,o=>o.MapFrom(s=>string.Join(“\n”,s.Departments)))
.ForMember(x=>x.Titles,o=>o.MapFrom(s=>string.Join(“\n”,s.Titles));
但是,这并不能解释为什么会出现这种情况。 正如多东所指出的那样:

LINQ to Entities无法识别方法“System.String Join(System.String,System.Collections.Generic.IEnumerable1[System.String])”方法,并且无法将此方法转换为存储表达式

AutoMapper扩展似乎试图映射以下内容:

IEnumerable<string> => IEnumerable<char>
IEnumerable=>IEnumerable

你能试试这个吗:
CreateMap().ForMember(x=>x.Departments,o=>o.MapFrom(s=>string.Join(“\n”,s.Departments))).ForMember(x=>x.Titles,o=>o.MapFrom(s=>string.Join(“\n”,s.Titles))?我有一个假设,但我不确定它是否正确
.ProjectToQueryable()
来自哪里?我已经安装了AutoMapper.EF6 Nuget,但找不到它,似乎它是复制error@JakubJankowski您应该能够使用AutoMapper.QueryableExtensions添加
然后你应该会看到扩展名
ProjectToQueryable
顺便说一句,我重新创建了这个问题,并尝试了你的建议,它似乎纠正了映射,我想知道Automapper是否将
List
中的每个字符串都视为字符列表,并查找这些字符串的映射。回想起来,我已经知道了这个问题:
LINQ to Entities无法识别方法“System.string Join(System.string,System.Collections.Generic.IEnumerable
1[System.string]),这个方法不能被翻译成商店里的表达方式。实际上,扩展将字符串视为字符集合,将列表视为字符串集合,因此尝试映射:
string
=>
char
。我是否应该根据我的评论创建一个答案?
Mapper.Map<List<TReport>, List<TModel>>(_reportService.GetReportBaseQuery().ToList());
CreateMap<UserReport, UserModel>()
    .ForMember(x => x.Departments, o => o.MapFrom(s => string.Join("\n", s.Departments)))
    .ForMember(x => x.Titles, o => o.MapFrom(s => string.Join("\n", s.Titles)));
IEnumerable<string> => IEnumerable<char>