C# 自动映射投影中的Lambda表达式错误
我有两个完全相同的类,但在不同的命名空间中(即project)。现在我使用AutoMapper映射这两个类的对象,但它给了我一个错误。错误是: “无法将lambda表达式转换为类型‘string’,因为它不是委托类型” 下面是我的代码:C# 自动映射投影中的Lambda表达式错误,c#,asp.net,linq,automapper,C#,Asp.net,Linq,Automapper,我有两个完全相同的类,但在不同的命名空间中(即project)。现在我使用AutoMapper映射这两个类的对象,但它给了我一个错误。错误是: “无法将lambda表达式转换为类型‘string’,因为它不是委托类型” 下面是我的代码: Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>().ForMember( dest => dest.EventType, src => src.EventType)
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>().ForMember(
dest => dest.EventType, src => src.EventType);
Mapper.CreateMap().FormMember(
dest=>dest.EventType,src=>src.EventType);
我也试过这个
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>().ForMember(
dest => dest.EventType, map => map.MapFrom(src => src.Eventtype));
Namespace2.EventID destEventID = Mapper.Map<Namespace2.EventID>(eventID);
Mapper.CreateMap().FormMember(
dest=>dest.EventType,map=>map.MapFrom(src=>src.EventType));
Namespace2.EventID destEventID=Mapper.Map(EventID);
我在dest=>dest.EventType
处遇到错误。
请注意,EventType
属于其他类类型
由于这两个类具有相同的结构,ForMember()
不是必需的,但是如果我删除ForMember()
,则它会显示运行时异常“缺少类型映射配置或不支持的映射”
我同时添加了system.Linq
和system.Data
。
如何映射这两种类型?当AutoMaper无法找到您尝试执行的特定映射的正确映射时,将抛出“缺少类型映射配置或不支持的映射”
它可能与在代码中调用Mapper.CreateMap
函数的位置有关,在调用Mapper.Map
之前需要先调用它
另外,由于有两个相同的类,请确保按照正确的顺序创建地图。第一个泛型类型参数是源,第二个是目标。例如,您可能需要创建此地图:
Mapper.CreateMap<Namespace2.EventID, Namespace1.EventID>()
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>()
Mapper.CreateMap()
与此地图相反:
Mapper.CreateMap<Namespace2.EventID, Namespace1.EventID>()
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>()
Mapper.CreateMap()
正如您所说的,您不必指定任何
ForMember()
调用,因为两个类都具有相同的结构。我遇到了相同的错误。从你发布的内容来看,我不知道我们的原因是否相同,但也许这有助于解释我的错误原因
有一个重载,第一个参数是字符串,但是我们需要另一个重载,其中第一个参数是函数。编译器似乎不明白这一点。在我的例子中,这是因为编译器在第二个参数中有一个错误。一旦修复了,就不会抱怨“无法将lambda表达式转换为'string'类型,因为它不再是委托类型”
以下是我的工作内容:
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
)有效,第二个(CreateMap
)无效
这就是为什么编译器无法读取
FormMember
中的第二个参数,从而导致混淆它应该选择什么重载。不需要也为该类指定映射。因为automapper在我使用它的时候没有那么聪明。如果有一些对象的CreateMap,那么它正在工作。什么是EventType?如果AutoMapper无法自动映射这两种不同的类型,那么您也需要定义该映射。我正在将对象Namespace1.EventID(即源对象)转换为Namesapce2.EventID(即目标对象)。所以序列在Mapper.CreateMap()中是正确的,太糟糕了,没有那么简单=)
Mapper.CreateMap<Namespace1.SomeClass, Namespace2.SomeClass>();
Mapper.CreateMap<Namespace1.EventID, Namespace2.EventID>();