2010-10-04 47 views
1

我正嘗試使用LINQ來查詢適當的對象列表。目前我被困在一個嵌套查詢的語法,我希望你能幫助我。C#LINQ子查詢(在實體上)

類:

public class FooType 
{ 
    public int Id { get; set; } 

    public IList<Foo> Foos { get; set; } 

} 

public class Foo 
{ 
    public int FooTypeId { get; set; } 

    public string CorrelationId { get; set; } 
} 

public class Bar 
{ 
    public string FooCorrelationId { get; set; } 
} 

用法:

IList <FooType> fooTypes = new List <FooType>(); 
// ... add a lot of FooTypes, each enriched with some Foos 
Bar bar = new Bar(){FooCorrelationId = "abcdef"}; 
Foo foo = fooTypes.Where(ft => ft.Foos.Where(f => f.CorrelationId == bar.FooCorrelationId)).First<Foo>(); 

因爲外WHERE-表達與一些不提供一個布爾值返回供給該失敗。正如你可能已經猜到,我打算像在LINQ如下:

foreach (FooType fooType in fooTypes) 
{ 
    Foo foo = fooType.Foos 
         .Where(f => f.CorrelationId == bar.FooCorrelationId) 
         .First(); 
} 

你有任何想法如何獲取美孚我在尋找,一個用的correlationID「ABCDEF」?

對於基準測試者還有一個問題:表現如何? LINQ是否優化了查詢?或者,結果就像我在「類似」塊中那樣對對象進行迭代一樣?

非常感謝!

回答

4

,其中有剛的SelectMany更換外,並獲得第一

Foo foo = fooTypes 
    .SelectMany(ft => ft.Foos.Where(f => f.CorrelationId == bar.FooCorrelationId)) 
    .First(); 

如果一個在所有FooType,什麼都有的correlationID == FooCorrelationId拿到第一富。

+0

非常感謝,這正是我一直在尋找的!我將不得不稍稍暫停,以提高我的技能=) – 2010-10-04 09:04:34