【发布时间】:2016-01-25 01:29:10
【问题描述】:
我正在尝试确保列表具有唯一的 SSN。我收到“无法为表达式元素 => 元素自动确定属性名称。请通过调用 'WithName' 指定自定义属性名称”错误。我们会知道我在这里做错了什么吗?
using FluentValidation;
using FluentValidation.Validators;
public class PersonsValidator : AbstractValidator<Persons>
{
public PersonsValidator()
{
this.RuleFor(element => element)
.SetValidator(new SSNNumbersInHouseHoldShouldBeUnique<Persons>())
.WithName("SSN");
.WithMessage("SSN's in household should be unique");
}
}
public class SSNNumbersInHouseHoldShouldBeUnique<T> : PropertyValidator
{
public SSNNumbersInHouseHoldShouldBeUnique()
: base("SSN's in household should be unique")
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
var persons = context.Instance as Persons;
try
{
if (persons == null)
{
return false;
}
var persons = persons.Where(element => element.SSN.Trim().Length > 0);
var allSSNs = persons.Select(element => element.SSN.Trim());
if (allSSNs.Count() > allSSNs.Distinct().Count())
{
return false;
}
return true;
}
catch (Exception ex)
{
return false;
}
}
}
public class Persons : List<Person>
{}
public class Person
{
public string SSN{ get; set; }
}
【问题讨论】:
-
不应该是
element=>element.SSN吗?或者保留element => element并按照它的建议使用.WithName("SSN") -
谢谢罗伯。没有这样的 element=>element.SSN。使用 .WithName("SSN") 也会引发相同的错误。看来我在做一些根本错误的事情。我已经编辑了上面的问题。
标签: c# .net fluentvalidation