Сбор ошибок проверки вложенной коллекции в LanguageExt - PullRequest
0 голосов
/ 15 октября 2019

У меня есть следующие DTO:

public class DatumDto
{
    public int Year { get; set; }
    public decimal Value { get; set; }
}
public class UpdateDataDto
{
    public int Id { get; set; }
    public IEnumerable<DatumDto> TimeSeries { get; set; }
}

и следующие классы домена.

public class Datum
{
    public int Year { get; }
    public decimal Value { get; }

    public static Validation<Error, Datum> Of (int year, decimal value)
    {
        // ... logic

        return new Datum(year, value)
    }
}
public class Data
{
    public int Id { get; }
    public IEnumerable<Datum> TimeSeries { get; }

    public Validation<Error, Data> UpdateTimeSeries(IEnumerable<Datum> timeSeries)
    {
        // ... logic
    }
}

Я удалил некоторый код, чтобы иметьменьше беспорядка и сосредоточиться на том, что для меня важно.

Теперь мой вариант использования очень прост. Мне нужно загрузить Data с TimeSeries сущностями из базы данных и затем выполнить команду против них, в противном случае вернуть все ошибки клиенту.

Моя команда выглядит следующим образом:

public class UpdateDataCommand
{
    public Validation<Error, int> Execute(IEnumerable<UpdateDataDto> arguments)
    {
        var data = _repository.Get(arguments.Map(s => s.Id));

        // part I am struggling at
        // before making any actual changes, I have to validate whether ALL DatumDtos ar valid Datums
        // If all of them are valid within all arguments - I should proceed, otherwise gather all faulty Dtos and bring them back.

        // I've come here, but it does not compile

        var result =
            from d in data
            join arg in arguments on d.Id equals arg.Id
            from datum in arg.TimeSeries
            from validation in Domain.Datum.Of(datum.Year, datum.Value)
            select d.UpdateTimeSeries(validation);   // this does not compile
    }
}

Как мне проверить, все ли DatumDtos действительны в каждом элементе в сборе аргументов и только тогда, когда все прошло нормально и собрать все ошибки, если что-то пошло не так?

Я понимаю, что это может быть что-то тривиальным,но это еще не щелчок для меня. Буду признателен за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...