You can use Distinct() from the Linq namespace and a IEqualityComparer:
class Program { static void Main(string[] args) { List<KeyValueClass> myList = new List<KeyValueClass> { new KeyValueClass {Age = 21, Name = "Carl"}, new KeyValueClass {Age = 23, Name = "Vladimir"}, new KeyValueClass {Age = 25, Name = "Bob"}, new KeyValueClass {Age = 21, Name = "Olivia"}, new KeyValueClass {Age = 21, Name = "Carl"}, new KeyValueClass {Age = 30, Name = "Jacob"}, new KeyValueClass {Age = 23, Name = "Vladimir"}, }; var myDistincList = myList.Distinct(new KeyValueEqualityComparer()); foreach (var item in myDistincList) { Console.WriteLine("Age: {0}, Name:{1}", item.Age, item.Name); } Console.ReadKey(); } } public class KeyValueClass { public int Age { get; set; } public string Name { get; set; } } class KeyValueEqualityComparer : IEqualityComparer<KeyValueClass> { public bool Equals(KeyValueClass x, KeyValueClass y) { if (x == null || y == null) return false; if (x.Age == y.Age && x.Name.Equals(y.Name)) return true; return false; } public int GetHashCode(KeyValueClass obj) { return (obj.Age + obj.Name).GetHashCode() + 387; } }