Группировка по общим полям, а потом выборка первого:
var persons = new[]
{
new Person{ Id = 1, FirstName = "A", LastName = "A", Age = 20 },
new Person{ Id = 2, FirstName = "A", LastName = "B", Age = 20 },
new Person{ Id = 3, FirstName = "A", LastName = "C", Age = 30 },
new Person{ Id = 4, FirstName = "A", LastName = "D", Age = 30 },
new Person{ Id = 5, FirstName = "B", LastName = "A", Age = 10 },
new Person{ Id = 6, FirstName = "B", LastName = "B", Age = 20 },
new Person{ Id = 7, FirstName = "B", LastName = "C", Age = 10 },
};
var result = persons.GroupBy(x => new { x.FirstName, x.Age }).Select(x => x.First());
foreach (var element in result)
{
Console.WriteLine(element);
}
class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public override string ToString() => $"{Id}, {FirstName}, {LastName}, {Age}";
}