I have two lists of objects, using Linq I would like to merge them, but where the two lists contain objects with the same key, I only want the one with the greatest LastUpdated Value.
I thought that I could somehow get a list grouping by key a with max(LastUpdated) then join back to the list joining on key and LastUpdated, but there must be a more efficient way...
List<MyObject> lstListA = new List<MyObject>;
List<MyObject> lstListB = new List<MyObject>;
public class MyObject
{
public string Key {get;set;}
public string Value {get;set;}
public DateTime LastUpdated {get;set;}
}
One option, using DistinctBy
from MoreLINQ:
var query = lstListA.Concat(lstListB)
.OrderByDescending(x => x.LastUpdated)
.DistinctBy(x => x.Key);
Classic pick-a-winner.
IEnumerable<MyObject> query = lstListA
.Concat(lstListB)
.GroupBy(x => x.Key)
//now work with each group to pick a winner
.Select(g => g.OrderByDescending(x => x.LastUpdated).First())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With