我正在尝试映射我的 Box
反对我的 BoxedElectrodesRowModel
.Box
对象有一个属性 SerialNumbers
,并且每个都有自己的属性 SerialNumberName
.我正在尝试映射 SerialNumberName
的列表s 到我的 BoxedElectrodeRowModel
中的字符串列表叫 SerialNumbers
.
AutoMapper 代码
c.CreateMap<Box, BoxedElectrodesRowModel>()
.ForMember(dest => dest.BoxId, opts => opts.MapFrom(src => src.BoxID))
.ForMember(dest => dest.SerialNumbers, opts => opts.MapFrom(src => src.SerialNumbers.Select(t => t.SerialNumberName).FirstOrDefault().ToList()))
.ForMember(dest => dest.DateCreated, opts => opts.MapFrom(src => src.DateCreated));
这是我现在遇到的错误。我不知道它指的是什么“字符”。
Missing map from System.Char to System.String. Create using Mapper.CreateMap
所有这些的目的是使用 DataTables 创建一个表格,显示每个
Box
及其列表 SerialNumbers
在每一行上,如果有帮助的话。一切都已编码,但我在运行时不断收到上述错误。编辑:这是我正在映射的类(class)。我正在尝试映射
BoxId
至 BoxId
, DateCreated
至 DateCreated
,以及 SerialNumberName
从每个 SerialNumber
(在列表中)到 SerialNumbers
.盒子 (自动生成)
public partial class Box
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Box()
{
this.SerialNumbers = new HashSet<SerialNumber>();
}
public int BoxID { get; set; }
public System.DateTime DateCreated { get; set; }
public Nullable<System.DateTime> DateShipped { get; set; }
public string TrackingNumber { get; set; }
public Nullable<System.DateTime> DateReceived { get; set; }
public bool Active { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<SerialNumber> SerialNumbers { get; set; }
}
序列号 (这是每个“盒子”的属性,也是自动生成的代码)
public partial class SerialNumber
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public SerialNumber()
{
this.Comments = new HashSet<Comment>();
this.WIPHistories = new HashSet<WIPHistory>();
}
public int SerialNumberID { get; set; }
public int IncomingLotID { get; set; }
public string SerialNumberName { get; set; }
public string LamPurchaseOrder { get; set; }
public string LamLineNumber { get; set; }
public bool Refurbished { get; set; }
public int WIPLocationID { get; set; }
public int StatusID { get; set; }
public int RouteSectionStepID { get; set; }
public Nullable<int> RejectCategoryID { get; set; }
public Nullable<int> BoxID { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Comment> Comments { get; set; }
public virtual IncomingLot IncomingLot { get; set; }
public virtual RejectCategory RejectCategory { get; set; }
public virtual Status Status { get; set; }
public virtual WIPLocation WIPLocation { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<WIPHistory> WIPHistories { get; set; }
public virtual Box Box { get; set; }
public virtual RouteSectionStep RouteSectionStep { get; set; }
}
盒装电极行模型
public class BoxedElectrodesRowModel
{
public int BoxId { get; set; }
public List<string> SerialNumbers { get; set; } // change from List to ICollection if there are problems
public Nullable<System.DateTime> DateCreated { get; set; }
}
最佳答案
您的问题是 FirstOrDefault()
称呼。因为它只返回第一个 string
从序列号名称。但字符串是 IEnumerable<char>
.当 AutoMapper 看到两个可枚举项时,它会尝试映射它们。在您的情况下,它将是 IEnumerable<char>
至 IEnumerable<string>
.
要解决此问题,请删除 FirstOrDefault()
称呼。也因此 AutoMapper 知道如何映射 IEnumerable<T>
至 List<T>
您不需要手动创建列表。
opts => opts.MapFrom(src => src.SerialNumbers.Select(t => t.SerialNumberName))
关于c# - "Missing map from System.Char to System.String"AutoMapper 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708519/