Поскольку вы хотите обновить listB
, лучше всего сделать обычный цикл foreach
.Linq не для обновления, а для запросов.Кроме того, рассмотрите возможность хранения listA
в качестве словаря, поэтому доступ осуществляется в O(1)
:
var a = listA.ToDictionary(k => k.Id, v => v.Price);
foreach(var item in listB)
{
item.Price = a.TryGetValue(item.Id, out var newPrice) ? newPrice : item.Price;
}