2013-05-21 17 views
8

Mam kolekcję obiektu Foo z właściwością ICollection zawierającą listę obiektów People.Znajdź wszystkie elementy, których właściwość kolekcji zawiera elementy z innej listy.

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

Mam inną listę osób.

ICollection<Person> OtherPeople 

Muszę znaleźć wszystkie obiekty Foo, w których ludzie zawierają dowolną osobę z innych osób. Czy istnieje wersja .Contains, która akceptuje kolekcję? Coś jak:

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

Używam tego z Entity Framework, czy to się liczy.

Odpowiedz

10

Twoje odwoływanie się do metody C# Linq'a Any.

Metoda Any w zasadzie stwierdza, że ​​Dowolny z elementów w tym zbiorze (Enumerable) spełnia warunek, w twoim przypadku warunek jest taki, że inny zbiór zawiera jeden z elementów.

np.

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

Jednak metoda Any zwraca boolean stwierdzić, czy kolekcja ma Any elementy, które spełniają warunek - to nie daje nam, które elementy.

Inną metodą w Linq, na którą warto zwrócić uwagę, jest Where, podając nam wszystkie elementy, które spełniają warunek.

np.

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

Mam nadzieję, że uda ci się to we właściwym kierunku. Entity Framework nie powinno mieć znaczenia, ponieważ są one Enumerable. Prawie zapomniałem wspomnieć, że metody Linq są raczej proste, więc ich naprawdę nie ma potrzeby, aby były one w swoich własnych metodach.

Powiązane problemy