查找其集合属性包含另一个列表中的项目的所有项目

时间:2013-05-21 00:30:01

标签: linq entity-framework

我有一个对象Foo的集合,其ICollection属性包含一个People对象列表。

public class Foo
{
  public int Id { get; set; }
  public string Name { get; set; }
  public ICollection<Person> People { get; set; }
}

我有另一份人员名单。

ICollection<Person> OtherPeople

我需要找到所有对象Foo,其中People包含来自OtherPeople的任何人。 是否有接受集合的.Contains版本? 类似的东西:

var result = from f in FooCollection
             where f.People.Contains(otherPeople)
             select f;

如果重要的话,我正在使用Entity Framework。

2 个答案:

答案 0 :(得分:16)

您指的是使用C#Linq的Any方法。

Any方法基本上表明该集合中的任何元素(Enumerable)是否满足条件,在您的情况下条件是另一个集合是否包含其中一个元素。

离。

public bool HasPeople(ICollection<Person> original, ICollection<Person> otherPeople)
{
    return original.Any(p => otherPeople.Contains(p));
}

但是,Any方法返回boolean表示如果集合中有Any元素满足条件 - 这不会给我们提供哪些元素。

Linq中另一个值得注意的方法是Where为我们提供满足条件的所有元素。

离。

public IEnumerable<Person> GetPeople(ICollection<Person> original, ICollection<Person> otherPeople)
{
    return original.Where(p => otherPeople.Contains(p));
}

我希望能让你朝着正确的方向前进。实体框架应该无关紧要,因为它们是可枚举的。几乎忘了提到Linq方法相当简单,所以他们真的不需要这些方法。

答案 1 :(得分:0)

我最终实现了这样的辅助方法:

    public static bool HasElement<T>(ICollection<T> original, ICollection<T> otherCollection)
    {
        return original.Any(otherCollection.Contains);
    }

希望有帮助!