See If Element Exists Once in Enumerable (Linq)

Given the list ...

class Item
{
 public Name
 {
   get;
   set;
 }
}

List<Item> items = new List<Item>
{
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 2" },
 new Item() { Name = "Item 3" }
}

List<Item> listing = new List<Item>
{
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 2" },
 new Item() { Name = "Item 3" }
 new Item() { Name = "Item 4" }
}

      

and etc.

I need to create a third array that will cancel out the double instances in between; however, items named "1" are the same, but different "instances". Thus, the third list must have 1 instance of item 1, since "elements" have 2 instances. Any ideas on how this can be done via Linq?

0


a source to share


1 answer


First you need to create EqualityComparer

for Item

.

public sealed class ItemEqualityComparer : EqualityComparer<Item>
{
    public override bool Equals(Item x, Item y)
    {
        return x.Name.CompareTo(y.Name) == 0;
    }

    public override int GetHashCode(Item obj)
    {
        return obj.Name.GetHashCode();
    }
}

      



Then you only need Union

.

var itemUnion = items.Union(listing, new ItemEqualityComparer());

      

+3


a source







All Articles