2010-11-10 85 views
3

注:pseduo代碼和假思慮上對現場的類/屬性...,以保護無辜如何執行以下Linq/Lambda代碼?

我試圖找回Person情況下,該人具有特定名稱...作爲IQueryable的結果。

考慮下面的代碼...

public class Person 
{ 
    public ICollection<PersonDetails> PersonDetails { get; set; } 
} 

public class PersonDetails 
{ 
    public string Name { get; set; } 
} 

我怎麼能檢索Person,誰的名字 '弗雷德'?

我嘗試(這失敗)....

public static IQueryable<Person> WithName(this IQueryable<Person> value, 
              string name) 
{ 
    return value.Where(x => x.PersonDetails.Where(y => y.Name == name)); 
} 

..並且不編譯。

任何線索,偷看?

+0

它怎麼會失敗呢?你在這裏得到任何編譯器錯誤嗎? – 2010-11-10 13:21:42

+2

我錯過了什麼,或者爲什麼一個人有多個名字? – Timbo 2010-11-10 13:23:41

+0

@Timbo:我不知道,但我想這可能是一個既有中文名又有英文名的中國人? – 2010-11-10 13:27:46

回答

12

嘗試Any而不是第二Where

public static IQueryable<Person> WithName(this IQueryable<Person> value, 
              string name) 
{ 
    return value.Where(x => x.PersonDetails.Any(y => y.Name == name)); 
} 
+0

乾杯。我總是把它混淆起來。我最初試過'Any',然後'Where',但那當然失敗了......所以......乾杯!工作:) – 2010-11-10 13:40:10