我有一个对象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。
答案 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);
}
希望有帮助!