C# FluentValidation:将一个值与一组值进行比较?
在为单个类的属性制定简单规则时,我发现FluentValidation非常简单,但只要我需要比较集合(例如列表属性)中的值,它就会变得非常复杂。假设以下两个最小类:C# FluentValidation:将一个值与一组值进行比较?,c#,fluentvalidation,C#,Fluentvalidation,在为单个类的属性制定简单规则时,我发现FluentValidation非常简单,但只要我需要比较集合(例如列表属性)中的值,它就会变得非常复杂。假设以下两个最小类: public class PurchaseOrder { public List<LineItem> LineItems { get; set; } public decimal Total { get; set; } public PurchaseOrder() { L
public class PurchaseOrder
{
public List<LineItem> LineItems { get; set; }
public decimal Total { get; set; }
public PurchaseOrder()
{
LineItems = new List<LineItem>();
}
}
public class LineItem
{
public decimal Price { get; set; }
}
PurchaseOrderValidator如何确保所有LineItem.Price的总和等于PurchaseOrder.Total?这是一个存根,尽管我不确定必须这样做:
public class PurchaseOrderValidator : AbstractValidator<PurchaseOrder>
{
public PurchaseOrderValidator()
{
RuleFor(x => x.Total).Must(MatchSumOfLineItems);
}
private bool MatchSumOfLineItems(decimal arg)
{
return true;
}
}
只需创建一个以PurchaseOrder作为输入的验证方法,并对其执行任何您想要的操作
public class PurchaseOrderValidator : AbstractValidator<PurchaseOrder>
{
public PurchaseOrderValidator()
{
RuleFor(x => x).Must(MatchSumOfLineItems);
}
private bool MatchSumOfLineItems(PurchaseOrder arg)
{
return arg.Total == arg.LineItems.Sum(i => i.Price);
}
}
只需创建一个以PurchaseOrder作为输入的验证方法,并对其执行任何您想要的操作
public class PurchaseOrderValidator : AbstractValidator<PurchaseOrder>
{
public PurchaseOrderValidator()
{
RuleFor(x => x).Must(MatchSumOfLineItems);
}
private bool MatchSumOfLineItems(PurchaseOrder arg)
{
return arg.Total == arg.LineItems.Sum(i => i.Price);
}
}
为什么不使用。平等
为什么不使用。平等
与验证无关,但为什么不返回get of Total属性中的LineItem价格之和,并将set Private设置为Private?这是一个遗留应用程序,目前,我的任务是验证输出,而不是对应用程序进行更改。您尝试了什么。您尝试验证的post代码为PurchaseOrderValidator添加了一个始终成功的存根。与验证无关,但为什么不在get of Total属性中返回LineItem价格的总和,并将set Private设置为Private?这是一个遗留应用程序,目前,我的任务是验证输出,不更改应用程序。您尝试了什么。您尝试验证的post代码为PurchaseOrderValidator添加了一个始终成功的存根。非常感谢。这正是我所希望的那种班轮。非常感谢。这正是我所希望的那种班轮。
public class PurchaseOrderValidator : AbstractValidator<PurchaseOrder>
{
public PurchaseOrderValidator()
{
RuleFor(x => x.Total).Must(MatchSumOfLineItems);
}
private bool MatchSumOfLineItems(PurchaseOrder order, decimal sum)
{
return sum == order.LineItems.Sum(i => i.Price);
}
}
public class PurchaseOrderValidator : AbstractValidator<PurchaseOrder>
{
public PurchaseOrderValidator()
{
RuleFor(x => x.Total).Equal(x => x.LineItems.Sum(item => item.Price));
}
}