FluentValidation с OR?C#

Место общения программистов C#
Ответить
Anonymous
 FluentValidation с OR?

Сообщение Anonymous »

Я просматривал эту ссылку, пытаясь понять, как быстро и легко выполнить ИЛИ, но до сих пор путь к открытию привел меня по ДЛИННОМУ пути к чрезмерному кодированию того, что является и должно быть очень простой задачей, которая имеет ускользнул от меня.
От моего валидатора я надеялся сделать что-то простое, вроде этого:

Код: Выделить всё

public class BookingEquipmentModelValidator : AbstractValidator // AKA ShipmentEquipmentModelValidator
{
public BookingEquipmentModelValidator()
{
RuleFor(be => be.BookingId).GreaterThan(0);
RuleFor(be => be.BookingSlotId).GreaterThan(0);
RuleFor(be => be.GeneralVentSetting).MaximumLength(50);
RuleFor(be => be.Comments).MaximumLength(254);
RuleFor(be => be.SealNumber).MaximumLength(15);
When(be => be.EquipmentId > 0, () =>
{
RuleFor(be => be.ActualEquipmentTypeId).Equals(be => be.FirstRequestedEquipmentTypeId).Or
.Equals(be => be.SecondRequestedEquipmentTypeId).WithMessage("No Match on either Req1 or Req2");
});

не является допустимым синтаксисом, но я не могу заставить какой-либо подход работать. Цель:
  • Если предоставлено оборудование (EquipmentId > 0), то тип оборудования (ActualEquipmentTypeId) должен соответствовать ЛИБО типу оборудования Request1 (FirstRequestedEquipmentTypeId), ИЛИ оборудованию Request2. Тип (SecondRequestedEquipmentTypeId).
  • Если НИ ОДИН тип оборудования не соответствует фактическому, то должна быть возвращена ошибка проверки.
Все свойства содержатся в BookingEquipmentModel.
Я попробовал этот подход, но

Код: Выделить всё

        When(be => be.EquipmentId is > 0, () =>
{
RuleFor(be => be.ActualEquipmentTypeId != be.SecondRequestedEquipmentTypeId && be.ActualEquipmentTypeId != be.FirstRequestedEquipmentTypeId).Equals(true);
});
Надеюсь, я просто не понимаю чего-то очень простого, но на самом деле не знаю.

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-with-or
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»