LINQ to Objects Join two collections to set values in the first collection
This may save lot of your time. Below code is for Join two collections and to set property value of first collection.
class SourceType
{
public int Id;
public string Name;
public int Age { get; set; }
// other properties
}
class DestinationType
{
public int Id;
public string Name;
public int Age { get; set; }
// other properties
}
List<SourceType> sourceList = new List<SourceType>();
sourceList.Add(new SourceType { Id = 1, Name = "1111", Age = 35});
sourceList.Add(new SourceType { Id = 2, Name = "2222", Age = 26});
sourceList.Add(new SourceType { Id = 3, Name = "3333", Age = 43});
sourceList.Add(new SourceType { Id = 5, Name = "5555", Age = 37});
List<DestinationType> destinationList = new List<DestinationType>();
destinationList.Add(new DestinationType { Id = 1, Name = null });
destinationList.Add(new DestinationType { Id = 2, Name = null });
destinationList.Add(new DestinationType { Id = 3, Name = null });
destinationList.Add(new DestinationType { Id = 4, Name = null });
var mapped= destinationList.Join(sourceList, d => d.Id, s => s.Id, (d, s) =>
{
d.Name = s.Name;
d.Age = s.Age;
return d;
}).ToList();
Do the mutation in a loop. Optimally, Linq should be free of mutations to the collection(s) it operates against. Use Linq to filter, order, project your data, use traditional techniques to modify.
var joinedData = from m in mapped
join r in reasons on m.Id equals r.Id
select new { m, r };
foreach (var item in joinedData)
{
item.m.Reason = item.r.Reason;
}