Taking the union of two sets is useful and LINQ includes a query operator.
In the case where you want LINQ Union to return a distinct list of the union, You can implement an equality comparer (line 13) as shown below.
1: public class Contact 2: { 3: public string Name { get; set; } 4: public string Address { get; set; } 5: 6: public override string ToString() 7: { 8: return string.Format("{0} ---> {1}", Name, Address); 9: } 10: 11: } 12: 13: public class ContactComparer : IEqualityComparer 14: { 15: #region IEqualityComparer Members 16: 17: public bool Equals(Contact x, Contact y) 18: { 19: return x.Name == y.Name; 20: } 21: 22: public int GetHashCode(Contact obj) 23: { 24: return obj.Name.GetHashCode(); 25: } 26: 27: #endregion 28: } 29: 30: public class MyClass 31: { 32: public static void RunSnippet() 33: { 34: var contacts1 = new List{ 35: new Contact { 36: Name = "Guy", 37: Address = "Ontario" 38: }, 39: new Contact { 40: Name = "Frank", 41: Address = "Manitoba" 42: }, 43: new Contact { 44: Name = "Alain", 45: Address = "Manitoba" 46: } 47: }; 48: 49: var contacts2 = new List{ 50: new Contact { 51: Name = "Guy", 52: Address = "Ontario" 53: }, 54: new Contact { 55: Name = "Marc", 56: Address = "Ontario" 57: }, 58: }; 59: 60: var ontariocontact1 = from c1 in contacts1 61: where c1.Address == "Ontario" 62: select c1; 63: 64: var ontariocontact2 = from c2 in contacts2 65: where c2.Address == "Ontario" 66: select c2; 67: 68: var uniqueContacts = ontariocontact1.Union(ontariocontact2, 69: new ContactComparer()); 70: foreach (Contact contact in uniqueContacts) 71: { 72: Console.WriteLine(contact.ToString()); 73: System.Diagnostics.Debug.WriteLine(contact.ToString()); 74: } 75: }
The output from this will be:
Guy ---> Ontario Marc ---> OntarioGoogle+