如何从List<Event>中筛选出内部People列表含重复Email的Event对象
解决方案
你可以直接将嵌套Person对象的Email作为GroupBy的分组键,筛选出元素数≥2的分组后展开即可,符合你需求的实现代码如下:
var originalEventList = new List<Event>(); // 填充集合逻辑... // 确认每个Event的NextStatus.People非空且仅含1个元素时可以直接用以下代码 var eventListWithDuplicates = originalEventList .GroupBy(e => e.NextStatus.People.First().Email) .Where(group => group.Count() >= 2) .SelectMany(group => group) .ToList();
如果需要兼容People可能为空/无元素的场景,可以增加前置过滤逻辑避免运行时异常:
var eventListWithDuplicates = originalEventList .Where(e => e.NextStatus?.People != null && e.NextStatus.People.Any()) .GroupBy(e => e.NextStatus.People.First().Email) .Where(group => group.Count() >= 2) .SelectMany(group => group) .ToList();
逻辑说明
- 以每个Event对应Person的Email为键进行分组,相同Email的Event会被归到同一组
- 过滤掉分组内元素数小于2的分组,仅保留存在重复Email的分组
- 用
SelectMany将所有符合条件的分组内的Event对象展开为一个平级列表,就是你需要的重复Email对应的所有完整Event对象
内容的提问来源于stack exchange,提问作者mievvin
相关产品推荐
相关产品推荐

