Ich verwende AutoMapper für Objekt-Mapping. Manchmal ist der Quellwert gleich Null, also möchte ich ihn durch "" ersetzen, anstatt NULL in die Datenbank zu setzen. Das Quellobjekt hat viele Nullable-Datentypen wie Date, Decimal und Int. Derzeit bin ich mitKein Zwangsoperator ist zwischen den Typen 'System.String' und 'System.Nullable`1 [System.DateTime]' definiert.
public class Invoice
{
public Guid Id { get; set; }
public string Number { get; set; }
public Contact Contact { get; set; }
public InvoiceType Type { get; set; }
public InvoiceStatus Status { get; set; }
public LineAmountType LineAmountTypes { get; set; }
public DateTime? Date { get; set; }
public DateTime? DueDate { get; set; }
public DateTime? ExpectedPaymentDate { get; set; }
public DateTime? PlannedPaymentDate { get; set; }
public decimal? SubTotal { get; set; }
public decimal? TotalTax { get; set; }
public decimal? Total { get; set; }
public decimal? TotalDiscount { get; set;
public decimal? CurrencyRate { get; set; }
public DateTime? FullyPaidOnDate { get; set; }
public decimal? AmountDue { get; set; }
public decimal? AmountPaid { get; set; }
public decimal? AmountCredited { get; set; }
}
public partial class TempInvoice
{
public int RowId { get; set; }
public System.Guid InvoiceID { get; set; }
public string InvoiceNumber { get; set; }
public Nullable<System.Guid> ContactID { get; set; }
public string Type { get; set; }
public string Status { get; set; }
public string LineAmountType { get; set; }
public Nullable<System.DateTime> InvoiceDate { get; set; }
public Nullable<System.DateTime> DueDate { get; set; }
public Nullable<System.DateTime> ExpectedPaymentDate { get; set; }
public Nullable<System.DateTime> PlannedPaymentDate { get; set; }
public Nullable<decimal> SubTotal { get; set; }
public Nullable<decimal> TotalTax { get; set; }
public Nullable<decimal> Total { get; set; }
public Nullable<decimal> TotalDiscount { get; set; }
public Nullable<decimal> CurrencyRate { get; set; }
public Nullable<System.DateTime> FullyPaidOnDate { get; set; }
public Nullable<decimal> AmountDue { get; set; }
public Nullable<decimal> AmountCredited { get; set; }
}
public class InvoiceMapper : Profile
{
public InvoiceMapper()
{
CreateMap<Invoice, TempInvoice>()
.ForMember(des => des.PaymentID, map => map.MapFrom(src => src.Id))
.ForMember(des => des.InvoiceID, map => map.MapFrom(src => src.Invoice.Id))
.ForMember(des => des.PaymentDate, map => map.MapFrom(src => src.Date))
.ForAllMembers(src => src.NullSubstitute(""))//this doesn't work
;
}
}
aber ich bin der obigen Fehler. Gibt es eine Möglichkeit, den Datatime-Typ auszuschließen und int oder dezimal auf 0 und String auf "" zu setzen? Gibt es eine generische Methode, die ich für alle Datentypen verwenden kann? Danke
Einfach wie kann Datetime selbst "" nimmt, ist dies ein String-Typ so unvereinbar. 'DateTime dt =" "ist eine falsche Verwendung –
Ich bin mir dessen bewusst, gibt es eine Möglichkeit, den Datatime-Typ auszuschließen und Int oder Dezimal auf 0 und String auf" " –
Check diesen Link - http: // stackoverflow. com/a/35949590/1559611 können Sie die Option wie folgt verwenden: '.ForMember (dest => (...), opt => { opt.Condition (src => Nullbedingung); opt.MapFrom (src => Tatsächliche Zuordnung) ' Die beste Option ist eine separate Nullzuordnung für jeden Typ, anstatt einen für alle zu versuchen –