Merging IEnumerable and removing duplicates
With things like this, it's usually best to look at the documentation.

Is your approach with GroupBy() going to work? Yes:


  Elements in a grouping are yielded in the order they appear in source.


Can you use Distinct() to do the same thing more concisely? No (at least you shouldn't depend on it):


  The Distinct method returns an unordered sequence that contains no duplicate values.


Is there some other way? Yes, you can use Union():


  When the object returned by this method is enumerated, Union enumerates first and second in that order and yields each element that has not already been yielded.


So, I think the best way to do it is:

var result = firstFoos.Union(secondFoos);