using System; using System.Collections.Generic; using System.Linq; namespace myQuestion { class Program { public class DuplicateData { public string address { get; set; } } public class Com : IEqualityComparer { public bool Equals(DuplicateData x, DuplicateData y) { return x.address.Equals(y.address); } public int GetHashCode(DuplicateData obj) { return obj.address.GetHashCode(); } } static void Main() { List lst = new List(); lst.Add("a"); lst.Add("b"); lst.Add("c"); lst.Add("p"); List list = new List() { new DuplicateData{address="a"}, new DuplicateData{address="a"}, new DuplicateData{address="a"}, new DuplicateData{address="b"}, new DuplicateData{address="b"}, new DuplicateData{address="c"}, new DuplicateData{address="d"}, new DuplicateData{address="e"}, new DuplicateData{address="f"}, }; var dup = list.Distinct(new Com()); var RightJoin = from x in dup join y in lst on x.address equals y into right from z in right.DefaultIfEmpty(x.address) select new { UniqueAddress = z, }; foreach (var ex in RightJoin) { System.Console.WriteLine(ex.UniqueAddress); } System.Console.ReadLine(); } } }