【问题标题】:automapper gregorian datetime to persian datetime自动映射公历日期时间到波斯日期时间
【发布时间】:2021-02-18 11:34:29
【问题描述】:

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

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

我看到错误:

表达式树可能不包含使用 可选参数

这是为什么?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core automapper


    【解决方案1】:

    根据错误消息,您的映射代码不允许包含使用可选参数的方法调用。但是您的 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('-')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 2016-12-19
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多