gpt4 book ai didi

c# - Automapper 说缺少从 System.String 到 System.Char 的映射?但我看不到 Char 属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:31 49 4
gpt4 key购买 nike

我有三个类:

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; }
}

我的自动映射器配置设置为:

CreateMap<List<string>, string>().ConvertUsing(strings => {
if (strings != null)
return string.Join("\n", strings);
return "";
});
CreateMap<UserReport, UserModel>();

尝试使用 Automapper Ef 扩展从通用方法调用时:

IQueryable<TModel> modelQueryable = _reportService.GetReportBaseQuery().ProjectToQueryable<TModel>();

我收到这个错误

Missing map from System.String to System.Char. Create using Mapper.CreateMap.

GetReportBaseQuery()返回 IQueryable<TReport> , 所以 UserReport在这种情况下。我没有看到任何 char属性,为什么会出现这种情况?

只是为了测试我试着做了一个:

CreateMap<String, Char>().ConvertUsing(x => x.FirstOrDefault());

然后它说:

Argument types do not match

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

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

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

最佳答案

解决方案是为 DepartmentsTitles 字段显式设置映射:

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)));

但是,这并不能解释,为什么会出现这种情况。正如 DOTang 指出的那样:

LINQ to Entities does not recognize the method 'System.String Join(System.String, System.Collections.Generic.IEnumerable1[System.String])' method, and this method cannot be translated into a store expression.

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

IEnumerable<string> => IEnumerable<char>

关于c# - Automapper 说缺少从 System.String 到 System.Char 的映射?但我看不到 Char 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006595/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com