KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a situation where I want to compare to fields (example, ensuring the start time is before the end time). I'm using the System.ComponentModel.DataAnnotations attributes for my validation. My first thought was something like this: public enum CompareToOperation { EqualTo, LessThan, GreaterThan } public class CompareToAttribute : ValidationAttribute { CompareToOperation _Operation; IComparable _Comparision; public CompareToAttribute(CompareToOperation operation, Func<IComparable> comparison) { _Operation = operation; _Comparision = comparison(); } public override bool IsValid(object value) { if (!(value is IComparable)) return false; switch (_Operation) { case CompareToOperation.EqualTo: return _Comparision.Equals(value); case CompareToOperation.GreaterThan: return _Comparision.CompareTo(value) == 1; case CompareToOperation.LessThan: return _Comparision.CompareTo(value) == -1; } return false; } } public class SimpleClass { public DateTime Start {get;set;} [CompareTo(CompareToOperation.GreaterThan, () => this.Start)] // error here public DateTime End {get;set;} } This doesn't work however, there's a compiler error where the attribute is marked: Expression cannot contain anonymous methods or lambda expressions Does anyone have a solution for this? Or a different approach for validating one field compared to the value of another?
Tags (comma-separated)
Save Edits
Cancel