为什么单独的函数与Must属性一起使用而不是在其中写入整个表达式? (FluentValidation)

时间:2017-08-31 19:20:44

标签: c# linq fluentvalidation

我是Linq的新手和流畅的验证,我想知道..为什么使用方法1我得到一个错误但是使用方法2它没有任何问题?

这种方式不起作用!!抛出空引用异常。

 RuleFor(x => x)
        .Must(ledger => !_companyDbContext.GeneralLedger.Any(x =>
            x.Deleted == false
            && !(x.Id == ledger.Id)
            && x.AccountNumber == ledger.AccountNumber
            &&  x.LedgerAccount == ledger.LedgerAccount
            && x.AccountType == ledger.AccountType 
            &&  x.Description == ledger.Description
            )).WithMessage(ValidatorResources.Unique_Message);

即使对象的所有属性都为空,这种方式仍然有效。

    RuleFor(x => x)
        .Must(testDuplicateRecords)
        .WithMessage("duplicated record");

public bool testDuplicateRecords( GeneralLedger ledger)
{
    Expression<Func<GeneralLedger, bool>> predicate = (x) => x.Deleted == false && !(x.Id == ledger.Id)
        && x.AccountNumber == ledger.AccountNumber
        && x.LedgerAccount == ledger.LedgerAccount
        && x.AccountType == ledger.AccountType
        && x.Description == ledger.Description;


    return !_companyDbContext.GeneralLedger.Any(predicate.Compile());

}

0 个答案:

没有答案