Auto-Mapper-konvertieren von string zu Int
Ich bin erstellen einer einfachen MVC4-Anwendung
Ich habe einen automapper
Mapper.CreateMap<SourceClass, DestinationClass>()
.ForMember(dest => dest.IntphoneNo,
opt => opt.MapFrom(src => src.Stringphoneno));
IntphoneNo ist der Datentyp int ( IntphoneNo ist eine variable von meiner Klasse Person
)
Quelle Attribut Stringphoneno ist der Datentyp string.
Wenn ich am mapping , erhalte ich folgende Fehlermeldung.
Eine Ausnahme des Typs " AutoMapper.AutoMapperMappingException' ist in AutoMapper.dll wurde aber nicht behandelt werden, in Benutzer-code
Aber wenn ich mich verändert die Dataype von IntphoneNo von int zu string dann mein Programm läuft erfolgreich.
Leider kann ich nicht ändern Sie den Datentyp inmy Modell
Ist theer irgendeiner Weise zu ändern Datatupe im mapping ..
So etwas wie unten
.ForMember(dest => dest.IntphoneNo,
opt => opt.MapFrom(src => src.Int32(Stringphoneno));
Nach einigen Recherchen kam ich einen Schritt weiter ..
Wenn meine StringPhoneNo ist = 123456
dann folgende code arbeitet. Ich brauchen nicht zu analysieren, es zu string
Mapper.CreateMap<SourceClass, DestinationClass>()
.ForMember(dest => dest.IntphoneNo,
opt => opt.MapFrom(src => src.Stringphoneno));
aber wenn meine StringPhoneNo = 12 3456 ( es ist ein Platz nach 12) dann wird mein code nicht funktioniert.
Gibt es eine Möglichkeit zum trimmen von Leerzeichen in Stringphoneno (Stringphoneno ich bin geting von webservice) in automapper.
Sowas wie unten..
Mapper.CreateMap<SourceClass, DestinationClass>()
.ForMember(dest => dest.IntphoneNo,
opt => opt.MapFrom(src => src.Trim(Stringphoneno)));
Ich kam über die gleiche Art von Beratung an einer Stelle, wenn jemand darauf hingewiesen, dass wir sollten nicht über das Geld, das sql-Typ zu speichern Geld und sollte stattdessen decimal. Ich hatte ein gutes lachen, wenn ich darauf hingewiesen, dass wir arbeiteten in US-Dollar, und wenn wir jemals einen Auftrag, in dem der Kauf tatsächlich größer war, als das Geld zu geben, würde ich die Bestellung per hand, wir waren eine kleine Wein-Unternehmen. Nicht wirklich relevant, nur eine Geschichte, die ich immer mochte.
Faktorovich - Doch die Suche nach einem Internationalen Telefon-Nummer, größer als 10 Ziffer ist wesentlich einfacher als scoring eine Bestellung größer als max Geld-Typ 🙂
Daten Art der Quelle ist nicht in meiner Kontrolle. Ich bin immer Quelle über einen webservice..
Ich bin damit einverstanden, nur eine Geschichte, die ich immer mochte.
InformationsquelleAutor user2739679 | 2013-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist hier einige Beispiel-arbeiten von code mithilfe der Karte beschrieben
int.Parsen nicht funktioniert....weder Int32.Analysieren..
stackoverflow.com/questions/136035/... zu erfassen ist die Ausnahme!! vielleicht ist der string keine Zahl ist...
int.Analysieren und Int32.Analysiert werden buchstäblich die gleiche Sache, int Karten auf Int32. Sie können einen Haltepunkt in der lambda-Ausdruck, der tut das Parsen, um zu sehen, was der Wert von Stringphoneno zu wissen, wenn Sie brauchen, um Sie zu formatieren, entfernen Sie es, Bindestrichen zum Beispiel ersten.
ich kann nicht setzen Sie einen break-point-ons Linie im Mapper.CreateMap. Wenn ich versuche mich zu legte eine Pause, es ist Wahl gesamten Bereich der automapper
InformationsquelleAutor Yuriy Faktorovich
Das problem können Sie Gesicht ist, wenn es nicht Parsen der string, eine Möglichkeit wäre die Verwendung einer ResolveUsing:
src => double.TryParse(src.strphoneno, out var phoneNo) ? phoneNo : default(double)
)Ich mag, dass, aktualisiert +1
InformationsquelleAutor WhizBang
Yuriy Faktorovich
's Lösung kann verallgemeinert werden für allestring
s konvertiert werden sollen, umint
s durch die Definition von extension-Methode fürIMappingExpression
- und Gebrauchsspuren, einige benutzerdefinierte Attribut:Um diese Arbeit zu machen, müssen folgende Schritte durchgeführt werden:
Mapping zwischen Quelle und Ziel muss anfügen das mapping Erweiterung. E. g.:
Wenden Sie das Attribut auf alle Quell-string-Eigenschaften müssen automatisch umgewandelt werden, um integer-Werte
InformationsquelleAutor Alexei
Hier ist eine einfachere, aber weniger skalierbaren Ansatz. Wenn Sie call-Mapper.Initialisieren, denken Sie daran, zu nennen .ToInt() oder erhalten Sie einen Laufzeitfehler.
InformationsquelleAutor Mitch Stewart