2009-11-05 5 views
4

Comment puis-je créer une requête Linq pour récupérer TOUS les rabais de produits d'une catégorie?LINQ Sélectionner dans la sous-liste

public class ProductCategory 
{ 
    public List<Product> categoryProducts; 
} 

public class Product 
{ 
    public List<Productprice> productPrices; 
} 

public class Productprice 
{ 
    public List<Productpricediscount> priceDiscounts; 
} 

Ma requête doit ressembler à:

categoryProducts.Select(p => p.productPrices).Select(x => x.?!?! 

Le problème est que je me serais attendu à x. - IntelliSense pour suggérer priceDiscounts, mais je reçois "liste" -values:

Répondre

12

Vous aurez (comme "Any", "Select", "Distinct" et ainsi de suite.) besoin d'utiliser SelectMany afin d'accéder priceDiscounts:

var query = categoryProducts 
      .SelectMany(x => x.productPrices) 
      .SelectMany(y => y.priceDiscounts); 
+0

Je pense que vous aurez besoin d'un deuxième SelectMany au lieu d'une sélection, afin d'aplatir les résultats. –

+0

@Winston: Vous avez raison. C'est en fait ce que j'ai écrit à l'origine mais ensuite j'ai édité et changé pour un 'Select'. Je viens de revenir à 'SelectMany'. – LukeH

4

Vous avez besoin Enumerable.SelectMany

var result = categoryProducts.SelectMany(x => x.productPrices) 
      .SelectMany(x => x.priceDiscounts); 
Questions connexes