Вдобавок к Jon's, вы также можете использовать LINQ Join
var query = firstCollection.Join(other, fc => fc.Id, o => o.Id, (fc, o) => fc);
foreach (var item in query)
{
item.IsIdValid = true;
}
, что, по сути, одно и то же, за исключением того, что вы позволяете LINQ выбрать стратегию объединения двух наборов вместо того, чтобы явно создавать HashSet самостоятельно. Я понятия не имею, что более эффективно под одеялом, но я надеюсь, что Join был по крайней мере таким же хорошим.