score:1

Accepted answer

As you have the ClientID field populated in both lists join them by that property and project a new object populated with all fields:

var result = from c1 in Clients1
             join c2 in Clients2 on c1.ClientID equals c2.ClientID
             select new Client { ClientID = c1.ClientID, Name = c1.Name, DCCode = c2.DCCode, CountryName = c2.CountryName };

This will create the third list. You can also update the items of Clients1 likewise:

foreach (var c1 in Clients1)
{
    var c2 = Clients2.FirstOrDefault(i => i.ClientID == c1.ClientID);
    if(c2 != null)
    {
        c1.DCCode = c2.DCCode;
        c1.CountryName = c2.CountryName;
    }
}

score:1

For updating entities in first list you can create dictionary from second list - that will allow you to quickly find corresponding entity with O(1):

var clientsByID = listB.ToDictionary(c => c.ClientID);

foreach(var clientA in listA)
{
    var clientB = clientsByID[clientA.ClientID];
    clientA.DCCode = clientB.DCCode;
    clientA.CountryName = clientB.CountryName;
}

You can also join two lists on ClientID property and produce new list from results (if enumerable is good for you, then I would go with query syntax instead):

var listC = listA.Join(listB, 
                a => a.ClientID, 
                b => b.ClientID,
                (a,b) => new Client { 
                   ClientID = a.ClientID, 
                   Name = a.Name,
                   DCCode = b.DCCode,
                   CountryName = b.CountryName
                }).ToList();

Related Query

More Query from same tag