我有一个类似于我的验证器创建的视图模型。
public class ViewModel
{
public KeyValuePair<int, RuleType> Foo { get; set; }
public KeyValuePair<string, RuleType> Bar { get; set; }
}
我的真实视图模型有20多个字段。验证数据后,类型ViewModel
的通用列表将返回到我的MVC视图并处理成报告。但是,出现了一个功能请求,用户希望只看到有错误和警告的模型,不包括有效实体。 RuleType
是一名普查员。如果密钥对的所有值均为RuleType.Success
,则模型有效。
是否可以遍历每个模型并检查RuleType
而无需手动检查每个属性?我的GetAllModelsWithErrors()
函数将返回无效模型列表。我相信反思可能是一个解决方案,但我不确定它是否是一个很好的解决方案。
答案 0 :(得分:2)
试试这个:
private IEnumerable<ViewModel> GetInvalidModels(ViewModel[] viewModels)
{
return
from viewModel in viewModels
from prop in typeof(ViewModel).GetProperties()
let ruleType = ((KeyValuePair<object, RuleType>)prop.GetValue(viewModel, null)).Value
where ruleType != RuleType.Success
select viewModel;
}