LINQ "Соотнести"
От: Venom  
Дата: 15.09.15 06:50
Оценка:
Сабж про "хочется удобства".

Domain, Dto, Repository здесь не принципиальны и использованы просто для привязки "к местности".
Допустим, имеется такой кейс:
var domainEntities = dtoEntities.Select(dto => repository.GetById<DomainEntity>(dto.Id)).Do(dto, domain => domain.Property = dto.Property);
repository.Save(domainEntities);

Тут есть несколько интересностей:
1) .Do это антипаттерн для функционального программирования (Lippert “foreach” vs “ForEach”), с этим всё понятно. .Do здесь просто для демонстрации хотелки;
2) dto в .Do(dto, ..) для сохранения предыдущего контекста/аккумулирования предыдущего значения. Это, кстати, почему-то не практикуется в Linq. Интересно почему.

В данный момент приходится делать так (не претендую на истину):
var domainEntities = dtoEntities.Select(dto => repository.GetById<DomainEntity>(dto.Id));
foreach (var domainEntity in domainEntities)
{
    domainEntity.Property = dtoEntities.Single(dto => domainEntity.Id == dto.Id)
        .Property;
}
repository.Save(domainEntities);

Как такое делать по-нормальному, т.е. с сохранением контекста по месту работы и без "сначала достали по айди, а потом соотносим то что достали по этому же айди, и только потом что-то делаем".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.