我刚刚开始学习linq和lambda表达式,它们似乎非常适合在复杂的对象集合中查找重复项,但我有点困惑,希望有人可以帮助我回到路径上快乐的编码。
我的对象的结构类似于list.list.uniqueCustomerIdentifier
我需要确保整个复杂对象中没有重复的uniqueCustomerIdentifier。如果有重复项,我需要确定哪些是重复的并返回重复项列表。
答案 0 :(得分:9)
var result =
myList
.SelectMany(x => x.InnerList)
.Select(y => y.uniqueCustomerIdentifier)
.GroupBy(id => id)
.Where(g => g.Skip(1).Any())
.Select(g => g.Key)
.ToList()
答案 1 :(得分:2)
有一个linq运算符Distinct(),如果只需要id,它允许您过滤到一组不同的记录。如果您已将类设置为覆盖等于您或拥有IEqualityComparer,则可以直接调用Distinct扩展方法以从列表中返回唯一结果。作为额外的奖励,您还可以使用Union和Intersect方法在两个列表之间进行合并或过滤。
另一种选择是按ID分组,然后选择第一个元素。
var results = from item in list
group item by item.id into g
select g.First();
答案 2 :(得分:0)
如果要展平两个列表层次结构,请使用SelectMany
方法将IEnumerable<IEnumerable<T>>
展平为IEnumerable<T>
。