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>