2012-01-03 3 views
0

У меня есть эти классы:LINQ - Список в списке фильтрации

public class Flight 
{ 
    public string FlightNum { get; set; } 
    public List<Pax> Pax { get; set; } 
} 

public class Pax 
{ 
    public string PaxName { get; set; } 
    public string PaxSurName { get; set; } 
} 

Я хочу, чтобы фильтровать полет так, что он будет содержать только полеты которого Пассажир имя определенной строки Я пробовал:

var paxList = flights.Where(f => f.Pax.Where(p => p.PaxName == "d")); 

Приведенный выше код не работает ... например: Я хочу это в выражении SINGLE Lambda

+0

, конечно, это не будет работать, где принимает Func, который возвращает логическое значение, но где сама возвращает новую IEnumerable –

ответ

8

Where нужна функция, которая возвращает boolean.

var paxList = flights.Where(f => f.Pax.Any(p => p.PaxName == "d")); 

вложенное выражение f.Pax.Any(p => p.PaxName == "d") возвращает истину, если любогоp соответствует критерию, что PaxName именно "d".

И, следовательно, результирующий список будет состоять из полетов (а не пассажиров), которые содержат любой пассажир, удовлетворяющий этому критерию. Я упоминаю об этом, потому что paxList потенциально не является хорошим именем переменной.

+0

или .Все(), если все потребности PaxName, чтобы быть «d» –

+0

это удивительно –

+0

@Pauli - будет довольно странным полетом! Возможно, все, кто летит на вечеринку для людей с таким же именем. :) –

Смежные вопросы