Fluent Validation输出当前记录信息

Fluent Validation output current record information

好的,我正在使用 Fluent Validation 作为我的 类 我想知道的事情之一。如何确定哪条记录有问题,例如下面的

被归类为客户可以参考的数字我将如何使用 Fluent Validation 更改下面的字符串以将其正在处理的当前记录输出给客户的文档号。

  public string DocumentNo { get; set; } 

是不是直接追加到字符串上就这么简单?

代码:

  public  class SupplierTransactionsValidation : AbstractValidator<SageStandardImportInvoces>
  { 


     public SupplierTransactionsValidation()
        {
            RuleFor(x => x.AnalysisCode1) // code repeated
                .NotEqual("None").WithMessage("Please enter a value for AnalysisCode1")
                .Length(0, 3);



            RuleFor(x => x.AnalysisCode2) // code repeated
                .NotEqual("None").WithMessage("Please enter a value for AnalysisCode2")
                .Length(0, 3);

            RuleFor(x => x.AnalysisCode3) // code repeated
                .NotEqual("None").WithMessage("Please enter a value for AnalysisCode3")
                .Length(0, 3);


        }
    }

如果我对你的问题的理解正确,你可以创建一个私有方法,通过将表达式的主体转换为 MemberExpression:[=12 来获取要验证的 属性 的名称=]

public class SupplierTransactionsValidation : AbstractValidator<SageStandardImportInvoces>
{
    public SupplierTransactionsValidation()
    {
        BuildRule(x => x.AnalysisCode1);
        BuildRule(x => x.AnalysisCode2);
        BuildRule(x => x.AnalysisCode3);
    }

    private IRuleBuilderOptions<SageStandardImportInvoces, string> 
        BuildRule(System.Linq.Expressions.Expression<Func<SageStandardImportInvoces, string>> expression)
    {
        return RuleFor(expression)
            .NotEqual("None")
            .WithMessage($"Please enter a value for {(expression.Body as System.Linq.Expressions.MemberExpression)?.Member.Name}")
            .Length(0, 3);
    }
}

这样你就不用重复你的逻辑了。