2010-11-10 87 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