如何检查“角色”列表中的“角色”?

时间:2019-06-04 10:33:37

标签: c# ivalidatableobject

我需要检查Role是否在Roles列表集合中,如果不是,则抛出验证结果。我该如何比较或如何以其他方式解决?

public class UserViewModel:IValidatableObject
{
    [Required]
    public string Username { get; set; }
    public IEnumerable<string> Roles { get; set; }

    [Required]
    public string Rola { get; set; }

    public UserViewModel()
    {
        Repozytorium db = new Repozytorium();
        Roles = db.GetAllRoles();
    }
    public UserViewModel(string userName, string rola)
    {
        Repozytorium db = new Repozytorium();
        Roles = db.GetAllRoles();
        Username = userName;
        Rola = rola;
    }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if(Roles != Roles )   //this dont work 
            yield return new ValidationResult("role isnt valid", new string[] { "Rola" });
    }
}

1 个答案:

答案 0 :(得分:1)

您正在检查您的角色集合是否不是您的角色集合。而是检查Rola是否不在集合中。使用Linq:

if(Roles.All(x => x != Rola ))
    yield return new ValidationResult("Role isn't valid", new [] {nameof(Rola)}; 

我还建议像示例中一样使用nameof,以便在更改属性名称时,错误消息仍然有效。