2016-04-28 34 views
1

我有一个汽车列表,并且他们的生产工厂中有一个列表。如何从LINQ列表中获取列表中的所有对象

List<Car> cars = new List(); 

现在我已经在这个列表中的每个车都在生产的Factorys。

List<FactoryCollection> factoryCollections = cars 
    .Select(c => c.Factories) 
    .ToList(); 

,现在我想获得一个列表与单个工厂,所以我根本其中,具体的汽车在所有生产工厂。

例如:

List<Factory> factories = factoryCollections 
    .Select(f => f.Werk); 

我的问题是,对象是更深一层。

我的问题是:

如何获得对象与LINQ说法还是有一个更简单的方法来对所有的工厂?而不是Select

List<Factory> factories = Car.Select(x => x.Factories).SelectMany(y => y.Werk).ToList(); 
+6

你可以扁平化啊用'SelectMany()'层叠。 –

回答

5

使用SelectMany看来,你正在寻找SelectMany

List<Car> Car = new List<Car>() {... } 
    ... 
    var factories = Car 
    .Where(car => IsCarSpecific(car)) 
    .SelectMany(car => car.Factories 
     .Select(factory => factory.Werk)); 
    // .Distinct(); // in case you want distinct factories 
    // .ToList(); if you want materiazlize into List<Factory> 
+0

是的,这是我寻找很多谢谢 – SeeuD1

5

3

您正在寻找SelectMany,但相对于其他的答案有点嵌套:

List<Factory> factories = cars 
    .SelectMany(c => c.Factories.Select(f => f.Werk)) 
    .ToList(); 
相关问题