使用LINQ在对象树中查找特定项

时间:2013-05-01 17:57:48

标签: c# linq

我有一份汽车清单。每辆汽车都有乘客名单。

如何使用Linq查找载有社会安全号码为999-99-9999的乘客的车?

这是我有多远。

var Passenger= Cars.SelectMany(c => c.Passengers).Where(p => p.SSN == "999-99-9999");

这给了我乘客。但我想要这位乘客所在的车。

2 个答案:

答案 0 :(得分:4)

您可以编写如下查询:

var selectedCars = cars.Where(c => c.Passengers.Any(p => p.SSN == "999-99-9999"));

如果您想要一辆载有乘客的车,您可以使用FirstOrDefault()

var car = cars.Where(c => c.Passengers.Any(p => p.SSN == "999-99-9999"))
              .FirstOrDefault();

如果没有找到汽车,这将返回null(如果Car是值类型,则返回默认值)。

答案 1 :(得分:2)

假设您有一个变量List<Car> cars

Car公开了一个属性

List<Passenger> Passengers

Passenger公开了一个属性string SSN

var p = cars.Where(s => s.Passengers.Any(p => p.SSN == "999-99-9999"))