12

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

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;

如果这很重要,我将它与实体框架一起使用。

4

2 回答 2

17

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

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

前任。

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

但是,如果集合具有满足条件的元素,该Any方法将返回一个状态- 这并没有告诉我们哪些元素。booleanAny

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

前任。

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

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

于 2013-05-21T00:40:20.407 回答
0

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

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

希望能帮助到你!

于 2018-09-04T19:42:44.973 回答