Написание атрибута аннотации сравнения для сравнения

У меня есть ситуация, когда я хочу сравнить с полями (например, убедиться, что время начала раньше времени окончания). Я'м, используяSystem.ComponentModel.DataAnnotations атрибуты для моей проверки.

Моя первая мысль была примерно такой:

public enum CompareToOperation
{
    EqualTo,
    LessThan,
    GreaterThan
}

public class CompareToAttribute : ValidationAttribute
{
    CompareToOperation _Operation;
    IComparable _Comparision;

    public CompareToAttribute(CompareToOperation operation, Func 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;}
}

Это неработать, тем не менее,Ошибка компилятора, когда атрибут помечен:

Expression cannot contain anonymous methods or lambda expressions

У кого-нибудь есть решение для этого? Или другой подход для проверки одного поля по сравнению со значением другого?

Ответы на вопрос(4)

Ваш ответ на вопрос