Код: Выделить всё
public async Task EditOfficeAsync(OfficeEditDTO editedOffice)
{
var office = await dbContext.Offices.Include(o => o.Address)
.Include(o => o.SalesPeople)
.FirstOrDefaultAsync(o => o.Id == editedOffice.Id);
if (office == null)
return null;
var selectedSalesPeopleIds = office.SalesPeople.Select(o => o.Id).ToList();
if (editedOffice.Name != null)
office.Name = editedOffice.Name;
if(editedOffice.Address != null)
{
if (editedOffice.Address.AddressLine != null)
office.Address.AddressLine = editedOffice.Address.AddressLine;
if (editedOffice.Address.PostalCode != null)
office.Address.PostalCode = editedOffice.Address.PostalCode;
if (editedOffice.Address.City != null)
office.Address.City = editedOffice.Address.City;
if (editedOffice.Address.Country != null)
office.Address.Country = editedOffice.Address.Country;
}
if (!new HashSet(editedOffice.SalesPeopleIds).SetEquals(selectedSalesPeopleIds))
office.ReplaceSalesPeople(await dbContext.SalesPeople.Where(s => editedOffice.SalesPeopleIds.Contains(s.Id)).ToListAsync());
await dbContext.SaveChangesAsync();
return new OfficeDTO(
office.Id,
office.Name,
new AddressDTO(
office.Address.Id,
office.Address.AddressLine,
office.Address.PostalCode,
office.Address.City,
office.Address.Country
),
office.SalesPeople.Select(s => new SalesPersonDTO(s.Id, s.Name)).ToList()
);
}
Код: Выделить всё
private List _salesPeople = [];
public IReadOnlyCollection SalesPeople
{
get => _salesPeople.AsReadOnly();
init => _salesPeople = Guard.Against.NoDuplicatesAndNotNull(value).ToList();
}
public void ReplaceSalesPeople(IEnumerable salesPeople)
{
Guard.Against.NoDuplicatesAndNotNull(salesPeople);
_salesPeople.Clear();
_salesPeople.AddRange(salesPeople);
}
Код: Выделить всё
public void ReplaceSalesPeople(IEnumerable salesPeople)
{
Guard.Against.NoDuplicatesAndNotNull(salesPeople);
var salesPeopleToRemove = _salesPeople.Where(s => !salesPeople.Any(ns => ns.Id == s.Id)).ToList();
foreach (var salesPerson in salesPeopleToRemove)
{
salesPerson.Office = null;
}
_salesPeople.Clear();
_salesPeople.AddRange(salesPeople);
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -list-item
Мобильная версия