Я бы сделал это с интерфейсом IValidatableObject
из System.ComponentModel.DataAnnotations, что позволяет добавлять дополнительные правила проверки, где вы можете сделать гораздо большую проверку. Добавьте интерфейс в свой класс, а затем внедрите метод Validate
, где вы можете сравнить StartDateTime с текущей датой / временем, а также сравнить EndDateTime с StartDateTime, например
public class MyClass : IValidatableObject
{
[Required(ErrorMessage="Start date and time cannot be empty")]
//validate:Must be greater than current date
[DataType(DataType.DateTime)]
public DateTime StartDateTime { get; set; }
[Required(ErrorMessage="End date and time cannot be empty")]
//validate:must be greater than StartDate
[DataType(DataType.DateTime)]
public DateTime EndDateTime { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> results = new List<ValidationResult>();
if (StartDateTime < DateTime.Now)
{
results.Add(new ValidationResult("Start date and time must be greater than current time", new []{"StartDateTime"}));
}
if (EndDateTime <= StartDateTime)
{
results.Add(new ValidationResult("EndDateTime must be greater that StartDateTime", new [] {"EndDateTime"}));
}
return results;
}
}
. только потенциальный недостаток этого заключается в том, что Validate
работает на стороне сервера, а не в проверке jQuery.
Вы можете сделать это в одном запросе, комбинируя ваши WHERE
условия, а затем упорядочивая их в зависимости от того, какой из них соответствует:
SELECT *
FROM users
WHERE unique_code = :unique_code OR birthday = :birthday
ORDER BY unique_code = :unique_code DESC
LIMIT 1
Если уникальный код соответствует, unique_code = :unique_code
будет равен 1, и так как мы сортируют DESCENDING, эта строка будет первой (и будет единственной строкой, оставшейся после предложения LIMIT
. Если уникальный код не совпадает, то, если есть какие-либо строки, они должны совпадать в день рождения.