c# - 使用 LINQ ANY 并且出现 > 1
问题描述
我有一个包含子对象集合的对象列表。我想检查这些对象中的任何一个子对象是否包含特定值,如果它们包含,然后检查该值是否出现在任何其他对象中。
我目前有这个需要扩展以进行第二次检查:
public bool HasAnyTypesMoreThanOnce(IEnumerable<Parent> parents, IEnumerable<string> Types)
{
return parents
.SelectMany(p => p.Children)
.Any(c => Types.Contains(c.Type));
}
我在想这样的事情:
var list = parents
.SelectMany(p => p.children)
.Where(c => Types.Contains(c.Type))
.Select(c => c.Type).ToList();
return list.Count != list.Distinct().Count();
有什么建议么?
解决方案
另一种方法是分组,如果有任何重复多次Type
,则返回 true,否则返回 false。Type
return parents.SelectMany(p => p.children)
.Where(c => Types.Contains(c.Type))
.GroupBy(x => x.Type)
.Any(g => g.Count() > 1);
推荐阅读
- javascript - HTML5 Canvas JS 上的碰撞检测
- php - PHP:如何无法读取函数返回值
- ios - SWIFT - UIBarButtonItem 没有调用动作
- android - 如何在kotlin字符串中的特定单词后获取一些字母?
- javascript - 在 NextJS 中使用 useState 对象时,上下文对象为空
- html - 如何在 css/div 容器中调整背景图像的大小?
- javascript - 将结果推送到对象
- android - 由于 Hilt 错误,应用程序未初始化
- python-3.x - 计算均匀性的度量标准,对较低的值进行惩罚
- r - 根据一组字符串条件创建一个新列