複雑なオブジェクトの2つのリストを考えてみましょう:
var first = new List<Record>
{
new Record(1, new List<int> { 2, 3 }),
new Record(4, new List<int> { 5, 6 })
};
var second = new List<Record>
{
new Record(1, new List<int> { 4 })
};
ここで、aRecord
は次のように定義されます。Id
とのリストを
持つクラスだけですSecondaryIdentifiers
。
public class Record
{
private readonly IList<int> _secondaryIdentifiers;
private readonly int _id;
public Record(int id, IList<int> secondaryIdentifiers)
{
_id = id;
_secondaryIdentifiers = secondaryIdentifiers;
}
public IList<int> SecondaryIdentifiers
{
get { return _secondaryIdentifiers; }
}
public int Id
{
get { return _id; }
}
}
Union および Intersect 操作がSecondaryIdentifiersをマージするように、どのように結合/関心を持たせることができますか。
var union = first.Union(second);
var intersect = first.Intersect(second);
ユニオンは
{
new Record(1, new List<int> { 2, 3 , 4 }),
new Record(4, new List<int> { 5, 6 })
};
交差する
{
new Record(1, new List<int> { 2, 3 , 4 }),
};
私が試したこと
比較された 2 つの項目が等しい場合に 2 つを拡張およびマージするfirst.Union(second, new EqualityComparer())
場所を使用してみましたが、少しハッキーに思えました。EqualityComparer
IEqualityComparer<Record>
SecondaryIdentifiers
これを行うためのよりエレガントな方法はありますか?