2013-05-01 28 views
0

我有一個汽車列表。每輛車都有一列乘客。使用LINQ查找物體樹中的特定物品

如何使用Linq找到有社會安全號碼爲999-99-9999的乘客的汽車?

這是我得到了多少。

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

這給了我的乘客。但我想要的車,這個乘客是

+4

[你嘗試過什麼?](HTTP ://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2013-05-01 17:58:35

+2

這取決於你如何構造汽車和乘客物體以及它們是如何相關的。你可以發佈它們嗎?我們會幫助你與Linq解析它們。 – 2013-05-01 17:59:21

回答

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(); 

如果找不到汽車,這將返回空值(如果汽車是值類型,則返回默認值)。

+0

建議'FristOrDefault',你應該提到如果沒有這樣的車會發生什麼 – 2013-05-01 18:08:29

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")) 
+0

我很好奇我爲什麼被低估? – Matthew 2013-05-01 18:05:27

+0

可能是因爲語法在最後一句 – 2013-05-01 18:05:58

+0

哈哈,downvoted一個明顯的錯字?固定。 – Matthew 2013-05-01 18:06:24