无法将 lambda 表达式转换为类型 'IValueResolver<Entity, MyDto, object>',因为它不是委托类型
Cannot convert lambda expression to type 'IValueResolver<Entity, MyDto, object>' because it is not a delegate type
我正在尝试在我的个人资料中定义这个简单的映射
CreateMap<CompanyClient, MyDto>()
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms != null
? companyClient.Company.PaymentTerms.Value
: null))
但是我收到了这个愚蠢的错误消息:
Cannot convert lambda expression to type 'IValueResolver<CompanyClient, MyDto, object>' because it is not a delegate type
这里的问题到底是什么?我在我的代码的其他地方使用了大量的三元运算符,但由于某种原因,这个可为 null 的 SmartEnum
案例有一些问题
实体:
public sealed class CompanyClient
{
...
Public PaymentTerm? PaymentTerms { get; private set; }
...
}
dto:
public sealed record MyDto
{
...
Public int? PaymentTerms { get; private init; }
...
}
PaymentTerm.cs 只是一个简单的 SmartEnum
请注意,当我这样写时它不会给出任何编译器错误:
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms ?? null))
或
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms))
有什么问题?
错误的原因是条件运算符 (c ? t : f
) 优先于 lambda 声明 (=>
)。
source
将条件运算符括在 {}
括号中应该可以解决您的问题:
CreateMap<CompanyClient, MyDto>()
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient =>
{
companyClient.Company.PaymentTerms != null
? companyClient.Company.PaymentTerms.Value
: null
}))
我发现我们可以通过将 non-null 结果转换为输出类型来摆脱这个愚蠢的消息。
那么在哪里
.ForMember(
dst => dst.VisitReportFileId,
opt => opt.MapFrom(src => src.VisitReportFile == null
? null
: src.VisitReportFile.Id.Key));
给我一个
Cannot convert lambda expression to type 'IValueResolver<Activity, ActivityDTO, object>' because it is not a delegate type
我可以通过将“else”结果转换为 Guid?
:
来修复它
.ForMember(
dst => dst.VisitReportFileId,
opt => opt.MapFrom(src => src.VisitReportFile == null
? null
: (Guid?)src.VisitReportFile.Id.Key));
我正在尝试在我的个人资料中定义这个简单的映射
CreateMap<CompanyClient, MyDto>()
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms != null
? companyClient.Company.PaymentTerms.Value
: null))
但是我收到了这个愚蠢的错误消息:
Cannot convert lambda expression to type 'IValueResolver<CompanyClient, MyDto, object>' because it is not a delegate type
这里的问题到底是什么?我在我的代码的其他地方使用了大量的三元运算符,但由于某种原因,这个可为 null 的 SmartEnum
案例有一些问题
实体:
public sealed class CompanyClient
{
...
Public PaymentTerm? PaymentTerms { get; private set; }
...
}
dto:
public sealed record MyDto
{
...
Public int? PaymentTerms { get; private init; }
...
}
PaymentTerm.cs 只是一个简单的 SmartEnum
请注意,当我这样写时它不会给出任何编译器错误:
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms ?? null))
或
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient => companyClient.Company.PaymentTerms))
有什么问题?
错误的原因是条件运算符 (c ? t : f
) 优先于 lambda 声明 (=>
)。
source
将条件运算符括在 {}
括号中应该可以解决您的问题:
CreateMap<CompanyClient, MyDto>()
.ForMember(
dto => dto.PaymentTerms,
opt => opt.MapFrom(companyClient =>
{
companyClient.Company.PaymentTerms != null
? companyClient.Company.PaymentTerms.Value
: null
}))
我发现我们可以通过将 non-null 结果转换为输出类型来摆脱这个愚蠢的消息。
那么在哪里
.ForMember(
dst => dst.VisitReportFileId,
opt => opt.MapFrom(src => src.VisitReportFile == null
? null
: src.VisitReportFile.Id.Key));
给我一个
Cannot convert lambda expression to type 'IValueResolver<Activity, ActivityDTO, object>' because it is not a delegate type
我可以通过将“else”结果转换为 Guid?
:
.ForMember(
dst => dst.VisitReportFileId,
opt => opt.MapFrom(src => src.VisitReportFile == null
? null
: (Guid?)src.VisitReportFile.Id.Key));