Обрабатывать нулевые значения в свойстве mapper - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь прочитать плоский файл и выполнить некоторые процессы. Для этого я определил картограф. Этот картограф назначит значения для каждого свойства. В документе дата будет представлена ​​в формате yyMMdd и может иметь значение "" или 000000 в качестве значения NULL. Это означает, что если дата равна 6 нулям или 6 пробелам, выходные данные должны быть нулевыми. Я попытался сделать это, определив NullFormater. Но не сработало.

Вот что я пробовал:

===========================

public class Test : DocumentRecordBase
{
public string StorageOrganisation { get; set; }
public Guid? StorageOrganisationId { get; set; }
public string StorageDescription { get; set; }
public DateTime? PaymentDueDate { get; set; }
public decimal? DiscountRate { get; set; }
public int? MaximumDaysDiscount { get; set; }
public DateTime? DateStorageChargeCommences { get; set; }
public decimal? StorageChargePerBalePerDay { get; set; }
public decimal? PenaltyInterestRate { get; set; }
public DateTime? LotAvailableDate { get; set; }
public decimal? PostSaleRechargeRebate { get; set; }

public Test() : base()
{
}

    public override T GetDocumentRecord<T>()
    {
        if (typeof(T) == typeof(Test))
        {
            return this as T;
        }
        return null;
    }


    public static IFixedLengthTypeMapper<Test> GetMapper()
    {
        var mapper = FixedLengthTypeMapper.Define<Test>();
        mapper.Property(r => r.RecordType, 2);
        mapper.Property(r => r.RecordSubType, 1);

        mapper.Property(r => r.PaymentDueDate, 6)
            .ColumnName("PaymentDueDate")
            .InputFormat("yyMMdd")
            .NullFormatter(NullFormatter.ForValue("000000")); // if the read value is "000000" or "      " then should pass as null


        mapper.CustomMapping(new RecordNumberColumn("RecordNumber")
        {
            IncludeSchema = true,
            IncludeSkippedRecords = true
        }, 0).WithReader(r => r.RecordNumber);
        return mapper;
    }

    public static bool GetMapperPredicate(string x)
    {
        return x.StartsWith("11A");
    }

}

1 Ответ

0 голосов
/ 02 декабря 2019

Согласно определению NullFormatter, ( найдено здесь ), вы можете назначить только 1 фиксированное значение. «Если это фиксированное значение, вы можете использовать метод NullFormatter.ForValue.»

NullFormatter = NullFormatter.ForValue("NULL") 

Если вы используете «000000», тогда он должен конвертировать 000000 в ноль, иначе пробелы будут считаться фактическими значениями. Любое число 0s! = 6 также приведет к ненулевому значению.

Также, пожалуйста, определите, что вы подразумеваете под "Но не сработало". Пожалуйста, предоставьте детали и ошибки для уточнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...