首页 > 解决方案 > 使用 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();

有什么建议么?

标签: c#linq

解决方案


另一种方法是分组,如果有任何重复多次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);

推荐阅读