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

And*_*rew 10 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; }
}
Run Code Online (Sandbox Code Playgroud)

我有另一份人员名单.

ICollection<Person> OtherPeople
Run Code Online (Sandbox Code Playgroud)

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

var result = from f in FooCollection
             where f.People.Contains(otherPeople)
             select f;
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*ins 16

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

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

恩.

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

但是,如果集合具有满足条件的元素,则该Any方法返回boolean到状态Any- 这不会为我们提供哪些元素.

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

恩.

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

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