2008-09-01 16 views
15

Mam List<int> i List<customObject>. Klasa customObject ma właściwość ID. Jak mogę uzyskać List<customObject> zawierający tylko obiekty, w których właściwość ID jest w List<int> przy użyciu LINQ?Filtr lista linq na wartość nieruchomości

Edytuj: Przyjmuję odpowiedź Konrada, ponieważ czytanie jest łatwiejsze/bardziej intuicyjne.

Odpowiedz

16
var result = from o in objList where intList.Contains(o.ID) select o 
+0

Czy metoda Linq '.Where' nie jest bardziej zwięzła? (zobacz moją odpowiedź poniżej) –

+0

@RobinWinslow Cóż, są one całkowicie równoważne, moje używa tylko składni wyrażenie zapytania. Moje są potencjalnie bardziej czytelne - ale przyznaję, że (przynajmniej w większości przypadków) rzeczywiście chodziłbym z waszym wariantem, ponieważ, jak pan powiedział, jest bardziej zwięzły. –

+0

Są one technicznie równoważne, ale uważam, że metoda '.Where() * znacznie * jest łatwiejsza do odczytania. Ale oczywiście to tylko moja opinia. –

6

Nietestowane, ale to będzie coś takiego:

var matches = from o in objList 
        join i in intList on o.ID equals i 
        select o; 

@Konrad tylko testowałem to i to działa - po prostu miałem literówkę gdzie ja napisane „i.ID” zamiast "ja".

2

Tylko dla kompletności (i być może łatwiej jest czytać?), Za pomocą „gdzie” podobny do Matt „join”:

var matches = from o in customObjectList 
       from i in intList 
       where o.ID == i 
       select o; 
10

miałem podobny problem właśnie teraz i używany poniżej rozwiązania. Jeśli masz już listę obiektów, możesz usunąć wszystkie nie znalezione na liście int, pozostawiając tylko dopasowania w objList.

0

Należy pamiętać, że użycie łączenia zamiast zawartych NIE DZIAŁA, gdy liczba pozycji na liście przekracza 49! Otrzymasz komunikat błędu: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

8
using System.Linq; 

objList.Where(x => intList.Contains(x.id)); 
Powiązane problemy