2015-03-31 170 views
0

我有以下數據結構。對象A包含了B. B的列表中包含C.從子列表中獲取對象

A 
{ 
    int id; 
    List<B>; 
} 

B 
{ 
    int id; 
    List<C>; 
} 

C 
{ 
    int id; 
} 

的名單我有對象的,和我有B.id,並C.id,我想找到的。我有LINQ這樣做:

A = SomeMethodToGetA(); 
int bid = 2; 
int cid = 20; 
B foundB = A.B.Where(item => item.id = bid).First() 
C foundC = B.C Where(item => item.id = cid).First() 

我想知道是否有執行上述語句合併爲一個LINQ聲明的方式。

回答

1

當然,只是鏈上的兩個Single查詢:

C foundC = A.B.Single(item => item.id == bid) 
      .C.Single(item => item.id == cid) 

如果沒有那B內的匹配B或匹配C這會拋出異常,但原來的查詢也不會。如果這些都是問題,那麼您的原始查詢(添加空值檢查)可能會更直接。

+0

請使用'=='...作業不會編譯... – 2015-03-31 18:53:29

+0

@AndreasNiedermair完成。 – 2015-03-31 18:54:20

+1

我還要補充說,Single和First在語義上是不同的,儘管後者通常被濫用。 – Casey 2015-03-31 19:01:59