2010-10-04 98 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