1

私はMVC4プロジェクトに取り組んでおり、KeyValueリストの値をnull許容のDateTimeに変換しようとしています。マッパーで次の行を使用しました(他のプロパティはたくさんあるので含めていません)

.ForMember(d => d.Deadline, m => m.ResolveUsing<DeadlineResolver>())

私のリゾルバは次のようになります。

public class DeadlineResolver : ValueResolver<Booking, DateTime?>
{
    protected override DateTime? ResolveCore(Booking source, ResolutionResult resolutionResult)
    {
        KeyValue keyValue = source.KeyValues.FirstOrDefault(k => k.Key.KeyId == "DEADLINE");
        return (keyValue != null) ? DateTime.Parse(keyValue.Value) : (DateTime?)null; 
    }
}

以下に示すように定義された期限の値は、nullとして返されることはなく、代わりにDateTime.MinDateとして返されます。結果をビューにバインドするときはnullにする必要があります。これにより、日付がある場合にのみ値が表示されます。

public DateTime? Deadline { get; set; }

マッピング後に値を調べて最小の日付を探してnullに設定せずにこれらの値をnullにするにはどうすればよいですか(コードが実行されるように設定した一時的なハック)?

4

1 に答える 1

0

LinqPad と AutoMapper 2.2.1 を使用すると、次のように有効な日付 whenKeyValueには日付があり、null DateTimewhen KeyValueisには有効な日付が表示されnullます。(クラス定義が提供されていないため、リゾルバーを簡素化するためにマイナーな変更があることに注意してください)。

void Main()
{
    AutoMapper.Mapper.CreateMap<Booking, dest>()
        .ForMember(d => d.Deadline, m => m.ResolveUsing<DeadlineResolver>());
    AutoMapper.Mapper.AssertConfigurationIsValid();

    // Gives a valid DateTime
    var booking = new Booking { KeyValue = "2013-01-01" };
    booking.Dump();
    var rc = AutoMapper.Mapper.Map<Booking, dest>(booking);
    rc.Dump();

    // Gives a null DateTime
    booking = new Booking { KeyValue = null };
    booking.Dump();
    rc = AutoMapper.Mapper.Map<Booking, dest>(booking);
    rc.Dump();
}

// Define other methods and classes here
public class Booking
{
    public string KeyValue { get; set; }
}

public class dest
{
    public DateTime? Deadline { get; set; }
}

public class DeadlineResolver : AutoMapper.ValueResolver<Booking, DateTime?>
{
    protected override DateTime? ResolveCore(Booking source)
    {
        return (source.KeyValue != null)
            ? DateTime.Parse(source.KeyValue)
            : (DateTime?)null; 
    }
}

これはあなたが求めていた機能ですか?その場合、AutoMapper の古いバージョンまたは予期しないKeyValue値に問題がある可能性があります。

于 2013-03-20T11:10:45.957 に答える