У меня есть следующие 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 действительны в каждом элементе в сборе аргументов и только тогда, когда все прошло нормально и собрать все ошибки, если что-то пошло не так?
Я понимаю, что это может быть что-то тривиальным,но это еще не щелчок для меня. Буду признателен за помощь.