繁体   English   中英

无法将 lambda 表达式转换为类型 'IValueResolver<entity, mydto, object> ' 因为它不是委托类型</entity,>

[英]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))

但我收到了这个愚蠢的错误信息:

无法将 lambda 表达式转换为类型“IValueResolver<CompanyClient, MyDto, object>”,因为它不是委托类型

这里的问题到底是什么? 我在代码的其他地方使用了大量三元运算符,但由于某种原因,这个可为空的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 声明( => )。 资源

将条件运算符包装在{}括号中应该可以解决您的问题:

CreateMap<CompanyClient, MyDto>() 
.ForMember(
    dto => dto.PaymentTerms,
    opt => opt.MapFrom(companyClient => 
    {
        companyClient.Company.PaymentTerms != null
            ? companyClient.Company.PaymentTerms.Value
            : null
    }))

我发现我们可以通过将非空结果转换为 output 类型来摆脱这个愚蠢的消息。

那么在哪里

.ForMember(
    dst => dst.VisitReportFileId,
    opt => opt.MapFrom(src => src.VisitReportFile == null 
        ? null 
        : src.VisitReportFile.Id.Key));

给我一个

无法将 lambda 表达式转换为类型 'IValueResolver<Activity, ActivityDTO, object>',因为它不是委托类型

我可以通过将“其他”结果转换为Guid?

.ForMember(
    dst => dst.VisitReportFileId,
    opt => opt.MapFrom(src => src.VisitReportFile == null 
        ? null 
        : (Guid?)src.VisitReportFile.Id.Key));

如果有人遇到此错误并且上面的答案没有帮助,请尝试以下操作。 https://stackoverflow.com/a/60379426/13434418

预览(不同源类型的条件映射)

//Cannot convert lambda expression to type
x.MapFrom(src => src.CommunityId.HasValue ? src.Community : src.Account)
//OK
x.MapFrom(src => src.CommunityId.HasValue ? (object)src.Community : src.Account)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM