2013-04-30 243 views
6

給定一個父對象列表,每個父對象都有一個子對象列表,我想查找與特定ID匹配的子對象。使用LINQ在父對象列表中查找子對象

public class Parent 
{ 
    public int ID { get; set; } 
    public List<Child> Children { get; set; } 
} 

public class Child 
{ 
    public int ID { get; set; } 
} 

現在我想具有特定ID的子對象:

List<Parent> parents = GetParents(); 
Child childWithId17 = ??? 

我怎樣才能做到這一點使用LINQ?

回答

17

我想你想:

Child childWithId17 = parents.SelectMany(parent => parent.Children) 
          .FirstOrDefault(child => child.ID == 17); 

注意,這個假設父母的兒童屬性將不會是一個空引用或包含空兒童引用。

+0

+1,安仁:)這是非常有用! – zey 2013-04-30 10:26:18

+0

@Ani爲null引用可以將兩個額外的Where條件加起來。 – 2013-04-30 10:27:55

+0

@AkashKava:當然,但除非設計允許空值,否則無需添加它們。 – Ani 2013-04-30 10:29:50

6

可以使用的SelectMany:

Child childWithId17 = parents.SelectMany(p => p.Children) 
          .Where(ch=>ch.ID==17) 
          .FirstOrDefault(); 
相關問題