Есть много способов сделать это .. Предполагая, что ваши списки имеют одинаковую длину
для l oop
for (int i = 0; i < persons.Count; i++)
persons[i].Id = ids[i];
foreach L oop
var index = 0;
foreach (var person in persons)
person.Id = ids[index++];
Метод расширения ForEach
var index = 0;
persons.ForEach(person => person.Id = ids[index++]);
Очередь
var queue = new Queue<int>(ids);
foreach (var person in persons)
person.Id = queue.Dequeue();
Примечание Linq (Language Integrated Query) предназначен для запросов, а не для обновления свойств, поэтому я вообще не рекомендую подход linq . Но кто я такой, чтобы судить ...
Enumerable.Range с побочными эффектами
Enumerable.Range(0, persons.Count).Select(i => persons[i].Id = ids[i]).ToList();
// or
var persons = Enumerable.Range(0, persons.Count).Select(i => { persons[i].Id = ids[i]; return persons[i]; }).ToList();
Zip с побочными эффектами
ids.Zip(persons, (i, person) => person.Id = i).ToList();
// or
var persons = ids.Zip(persons, (i, person) => { person.Id = i; return person; }).ToList();
// or still very iffy
ids.Zip(persons, (i, person) => (i: i, person: person))
.ToList()
.ForEach(x => x.person.Id = x.i);
Выбрать с побочными эффектами
persons.Select((person, i) => person.Id = i).ToList();
// or
var persons = persons.Select((person, i) => { person.Id = i; return person; }).ToList();
добавить еще много здесь