2011-05-24 2 views
1

J'ai la liste suivanteIGrouping mal à

class Programm 
    { 

     public static void Main(string[] args) 
     { 
      List<Service> Services =new List<Service> 
      { 
        new Service 
         { 
         Name = "name1", 
         Prices = new List<BEPrice> 
          { 
          new BEPrice 
           { 
           Price = 120, 
           Quantity = 3 
           } 

          } 
         }, 
       new Service 
        { 
        Name = "name2", 
        Prices = new List<BEPrice> 
         { 
         new BEPrice 
          { 
          Price = 123, 
          Quantity = 3 
          } 

        } 
       }, 

       new Service 
       { 
       Name = "name3", 
       Prices = new List<BEPrice> 
       { 
        new BEPrice 
        { 
         Price = 100, 
         Quantity = 3 
        } 

        } 
       }, 

       new Service 
       { 
       Name = "name4", 
       Prices = new List<BEPrice> 
       { 
        new BEPrice 
        { 
        Price = 900, 
        Quantity = 8 
        } 

       } 
      } 
     }; 






    } 


    public class Tariff 
    { 

     public string Name { get; set; } 
     public List<BEPrice> Prices { get; set; } 
    } 


    public class Service 
    { 

     public string Name { get; set; } 
     public List<BEPrice> Prices { get; set; } 
     public Tariff Tariff; 
    } 


    public class BEPrice 
    { 

     public decimal Price { get; set; } 
     public int Quantity { get; set; } 

    } 

Je veux un résultat aussi

Tariff-1 -> Name - "blabla", Prices = { 
      Price1 = {Price = 343, Quantity = 3}, 
      Price2 = {Price = 900, Quantity = 8} } 

Le tarif premier prix Price1 est une somme de , , pour 3 (quantité) mois.

Voici ma attemp sans succès

foreach (var groupedPrices in Services.Select(s => s.Prices.GroupBy(p => p.Quantity))) 
      { 

       foreach (var p in groupedPrices.Select(x => x.Key)) 
        Console.WriteLine(p); 


       foreach (var price in groupedPrices) 
       { 

        _prices.AddRange(price.Select(p => p)); 
       } 

      } 
+2

S'il vous plaît reformater votre code pour utiliser moins indentation. L'indentation de 8 caractères rend difficile la lecture du code dans un format étroit comme Stack Overflow. –

+1

@Jon Skeet: Je ne comprends pas pourquoi quelqu'un utiliserait plus de 2 espaces en C# de toute façon :) – leppie

Répondre

3

Je ne sais pas ce qui est blabla nom, mais comment vous pouvez obtenir des prix partie

var prices = Services 
    .SelectMany(arg => arg.Prices) 
    .GroupBy(arg => arg.Quantity) 
    .Select(arg => new { Price = arg.Sum(x => x.Price), Quantity = arg.Key }) 
    .ToList(); 
+0

C'est parfait !!! – Alexandre