1. ホーム
  2. c#

[解決済み] linqを使用してリスト内の重複を削除する

2022-02-04 17:03:18

質問

クラスがあります Itemsproperties (Id, Name, Code, Price) .

のリストが表示されます。 Items には、重複した項目が入力されます。

例えば..:

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

linqを使用してリストの重複を削除する方法は?

どのように解決するのですか?

var distinctItems = items.Distinct();

一部のプロパティのみでマッチングさせるには、カスタム等値比較器を作成します。

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();
    }
}

そして、このように使います。

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