我得到了同樣的錯誤。從你張貼的內容我不知道我們的理由是否相同,但也許這有助於解釋我的錯誤原因。
有一個字符串作爲第一個參數的重載,但我們需要另一個第一個參數是函數的地方。編譯器似乎沒有得到。就我而言,這是因爲編譯器在第二個參數中有錯誤。一旦這個問題得到解決,就不會再抱怨"cannot convert lambda expression to type 'string' because it is not a delegate type"
了。
這裏是我一起工作的東西:
public class ClassA
{
public DateTime? memberX { get; set; }
public DateTime? memberY { get; set; }
}
public class ClassB
{
public long? memberX { get; set; }
public long? memberY { get; set; }
}
DateTime IntToDateTime(int t);
int DateTimeToInt(DateTime t);
第(CreateMap<ClassA,ClassB>
)的作品,第二(CreateMap<ClassB,ClassA>
)不會。
CreateMap<ClassA, ClassB>()
.ForMember(dest => dest.memberX, opt => opt.MapFrom(src => src.memberX.HasValue ? DateTimeToInt(src.memberX.Value) : 0))
.ForMember(dest => dest.memberY, opt => opt.MapFrom(src => src.memberY.HasValue ? DateTimeToInt(src.memberY.Value) : 0))
;
CreateMap<ClassB, ClassA>()
.ForMember(dest => dest.memberX, opt => opt.MapFrom(src => src.memberX.HasValue ? IntToDateTime((int)src.memberX.Value) : null))
.ForMember(dest => dest.memberY, opt => opt.MapFrom(src => src.memberY.HasValue ? IntToDateTime((int)src.memberY.Value) : null))
;
什麼是第二(CreateMap<ClassB,ClassA>
)的工作是這樣的:
CreateMap<ClassB, ClassA>()
.ForMember(dest => dest.memberX, opt => opt.MapFrom(src => src.memberX.HasValue ? IntToDateTime((int)src.memberX.Value) : (DateTime?)null))
.ForMember(dest => dest.memberY, opt => opt.MapFrom(src => src.memberY.HasValue ? IntToDateTime((int)src.memberY.Value) : (DateTime?)null))
;
,能得到任何其他的編譯器錯誤?
可能的解決辦法:
是您EventType
類相同的類,或者是一個Namespace1.SomeClass EventType
,另一個是Namespace2.SomeClass EventType
?如果是這種情況,首先需要爲這些人創建一張地圖。那麼它應該沒有.ForMember
。
Mapper.CreateMap<Namespace1.SomeClass, Namespace2.SomeClass>();
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>();
這將是爲什麼編譯器不能在你的ForMember
閱讀的第二個參數,造成什麼超負荷,應該選擇的困惑。
你不需要爲該類指定一個地圖。因爲當我使用它時,automapper不是那麼聰明。如果有一些對象的CreateMap,那麼它正在工作。 –
什麼是EventType?如果這些是AutoMapper無法自動映射的兩種不同類型,則還需要定義該映射。 –