2013-05-21 4 views
8

私は、オブジェクト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のPersonが含まれています。 コレクションを受け入れる.Containsのバージョンがありますか? 何かのように:それは重要な場合

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

私は、Entity Frameworkを使用して、これを使用しています。

答えて

10

C#LinqのAnyメソッドの使用を参照してください。

Anyメソッドは基本的に、そのコレクション(Enumerable)内の任意の要素が条件を満たすかどうかを示します。条件の場合、別のコレクションに要素の1つが含まれている場合です。

ex。コレクションが条件を満たしてAny要素を持っている場合にAny方法を述べることbooleanを返ししかし

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

- これは私たちにどの要素を与えるものではありません。

注意する価値があるLinqの別の方法は、条件を満たすすべての要素を与えるWhereです。

ex。

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

あなたが正しい方向に進むことを望みます。 Entity FrameworkはEnumerableなので、問題ではありません。ほとんどのLinqメソッドはかなりシンプルなので、これらのメソッドが自分のメソッドにある必要はありません。

関連する問題