Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射投影中的Lambda表达式错误_C#_Asp.net_Linq_Automapper - Fatal编程技术网

C# 自动映射投影中的Lambda表达式错误

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)

我有两个完全相同的类,但在不同的命名空间中(即project)。现在我使用AutoMapper映射这两个类的对象,但它给了我一个错误。错误是:

“无法将lambda表达式转换为类型‘string’,因为它不是委托类型”

下面是我的代码:

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>();