Проблемы с группировкой игроков

#c# #.net #linq #grouping

Вопрос:

У меня есть следующий список

 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; }

    }
 

Я хочу получить такой результат, как

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

Тарифная первая цена Price1 343 составляет сумму 100, 120, 123 за 3 (количество) месяца.

Вот моя неудачная попытка

  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));
                }

            }
 

Комментарии:

1. Пожалуйста, переформатируйте свой код, чтобы использовать меньше отступов. Отступ в 8 символов действительно затрудняет чтение кода в узком формате, таком как переполнение стека.

2. @Jon Skeet: Я все равно не понимаю, зачем кому-то использовать более 2 пробелов в C#:)

Ответ №1:

Не уверен, как называется blabla, но вот как вы можете узнать цены на часть

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