Search code examples
c#linqlinq-to-objectsgeneric-list

Remove duplicates in the list using linq


I have a class Items with properties (Id, Name, Code, Price).

The List of Items is populated with duplicated items.

For ex.:

1         Item1       IT00001        $100
2         Item2       IT00002        $200
3         Item3       IT00003        $150
1         Item1       IT00001        $100
3         Item3       IT00003        $150

How to remove the duplicates in the list using linq?


Solution

  • var distinctItems = items.Distinct();
    

    To match on only some of the properties, create a custom equality comparer, e.g.:

    class DistinctItemComparer : IEqualityComparer<Item> {
    
        public bool Equals(Item x, Item y) {
            return x.Id == y.Id &&
                x.Name == y.Name &&
                x.Code == y.Code &&
                x.Price == y.Price;
        }
    
        public int GetHashCode(Item obj) {
            return obj.Id.GetHashCode() ^
                obj.Name.GetHashCode() ^
                obj.Code.GetHashCode() ^
                obj.Price.GetHashCode();
        }
    }
    

    Then use it like this:

    var distinctItems = items.Distinct(new DistinctItemComparer());