考虑两个复杂对象的列表:
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; }
}
}
我怎样才能联合/感兴趣,以便联合和相交操作合并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 }),
};
我试过的
如果比较的两个项目相等,我尝试使用first.Union(second, new EqualityComparer())
whereEqualityComparer
扩展IEqualityComparer<Record>
和合并两者SecondaryIdentifiers
,但对我来说似乎有点 hacky。
有没有更优雅的方式来做到这一点?