automapper 公历日期时间到波斯日期时间

automapper gregorian datetime to persian datetime

为什么我不能使用下面的例子?

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<SiteSetting, dto_site_setting>()
            .ForMember(dto => dto.LastUpdate, opt => opt.MapFrom(src =>
             src.LastUpdate.Value.ToShamsiDate()));
    }
}

public static class XDate
{
    public static string ToShamsiDate(this DateTime _date, char separator = '-')
    {
        var year = pcal.GetYear(_date);
        var month = pcal.GetMonth(_date).ToString("00");
        var day = pcal.GetDayOfMonth(_date).ToString("00");

        if (separator == '-')
           return string.Format("{0}-{1}-{2}", year, month, day);
        else
           return string.Format("{0}/{1}/{2}", year, month, day);
    }
}

我看到错误:

An expression tree may not contain a call or invocation that uses optional arguments

这是为什么?

根据错误消息,您的映射代码不允许包含使用可选参数的方法调用。但是您的 ToShamsiDate() 方法有一个可选参数(char separator = '-'),您实际上是在使用可选参数(通过不显式传递任何内容)从映射代码中调用该方法。

更改方法签名以使可选参数成为必需参数 -

public static string ToShamsiDate(this DateTime _date, char separator)

并在您的映射代码中显式传递参数 -

CreateMap<SiteSetting, dto_site_setting>()
    .ForMember(dto => dto.LastUpdate, opt => opt.MapFrom(src =>
     src.LastUpdate.Value.ToShamsiDate('-')));