我有这个视图模型:
public class BankAccountViewModel : IValidator<BankAccountViewModel>
{
public BankAccount BankAccount { get; set; }
public void ConfigureValidation(ValidationConfiguration<StockOnHandViewModel> config)
{
config.For(m => m.BankAccount.AccountHolder);
}
}
所以课程是:
public class BankAccount
{
public string AccountHolder { get; set; }
public List<Transfer> Transfers { get; set; }
}
public class Transfer
{
public int Amount { get; set; }
}
然后我有一些验证扩展
public static class ValidationExtensions
{
public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
this ValidationConfiguration<TModel> validationConfiguration,
Expression<Func<TModel, TProperty>> accessor)
{
return validationConfiguration.Add(accessor);
}
}
所以我能够为AccountHolder config.For(m => m.BankAccount.AccountHolder);
这很酷。它按预期发送表达式。
列表项目转移变得有点困难。
在转移中,我可能希望通过表达式发送每次转移的金额。所以,如果我有两次转移,我想发送:
m => m.BankAccount.Transfers[0].Amount
m => m.BankAccount.Transfers[1].Amount
我知道我可以这样做:
for(int i=0; i < BankAccount.Transfers.Count; i++)
{
config.For(m => m.BankAccount.Transfers[i].Amount);
}
但是我不想一直为列表项做这个。
我真的希望列表项可能有一个不同的For
方法,我可以调用它,它会为我做这个。
我想的可能是:
public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
this ValidationConfiguration<TModel> validationConfiguration,
Expression<Func<TModel, TProperty>> accessor, int count)
{
...
}
您可以将其称为:
config.For(m => m.BankAccount.Transfers[i].Amount, BankAccount.Transfers.Count);
但是这不起作用,因为我不知道如何在没有i的情况下发送表达式部分,然后为每个列表项填充它。也不知道该怎么做
任何人都知道该怎么做?
答案 0 :(得分:1)
让它返回一个列表似乎是linqy:
public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
this ValidationConfiguration<TModel> validationConfiguration,
Expression<Func<TModel,IEnumerator<TProperty>>> accessor)
{
...
}
然后这个:
config.For(m => m.BankAccount.Transfers.Select(t => t.Amount));
我没有测试过,所以它可能会有拼写错误。