// group the places
var groupPlacesQuery = from p in placesInMemory
group p by new { p.CountryFK, p.StateFK, p.CityFK} into g
select new { theKey = g.Key, Count = g.Count() };
// use the above query to obtain duplicates
var duplicatePlacesQuery = from p2 in placesInMemory
join pg in groupPlacesQuery
on new { p2.CountryFK, p2.StateFK, p2.CityFK } equals pg.theKey
where pg.Count > 1
select p2;
// navigate through results
foreach (PlaceEntity place in duplicatePlacesQuery)
{
// print
Console.WriteLine("{0}\t{1}\t{0}", place .CountryFK, place .StateFK, place .CityFK);
// the index on the original location, in case you want to delete it.
int indexInCollection = details.IndexOf(place);
}