@aleksey_semenov
разработчик C#

Как в C# с помощью Linq схлопнуть данные?

Есть Json - в котором приходит примерно такие данные
{
  'orders' : [ 
	  {
		  id: 1,
		  sku: 'AR',
		  sum: 100
	  },
	  {
		  id: 2,
		  sku: 'PR',
		  sum: 200
	  },
	  { 
		  id: 1,
		  sku: 'VR',
		  sum: 150
	  },
	]
}


если id совпадают, нужно чтобы sum просуммировались, а sku было в виде массива
  • Вопрос задан
  • 160 просмотров
Решения вопроса 2
@devilya
Не очень ясно, что за массив Вы хотите получить, но если по аналогии с суммированием конктатенацию строк выполнять, то, например, так:
class Program
    {
        static void Main(string[] args)
        {
            List<Order> orders = new List<Order>()
            {
                new Order()
                {
                    id = 1,
                    sku = "AR",
                    sum = 100
                },
                new Order()
                {
                    id = 2,
                    sku = "PR",
                    sum = 200
                },
                new Order()
                {
                    id = 1,
                    sku = "VR",
                    sum = 150
                }
            };

            var groupedOrders = orders.GroupBy(el => el.id)
                .Select(el => new Order()
                {
                    id = el.Key,
                    sum = el.Sum(s => s.sum),
                    sku = String.Join(String.Empty, el.Select(str => str.sku))
                });
           
        }
    }

    public class Order
    {
        public int id;
        public string sku;
        public int sum;
    }
Ответ написан
Комментировать
@MaximKAI
Возможно автор имел в виду что-то похожее. В результате получаем список из анонимных объектов с id, суммой и списком строк sku:

class Order
    {
        public int id;
        public string sku;
        public int sum;
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Order> orders = new List<Order>()
            {
                new Order()
                {
                    id = 1,
                    sku = "AR",
                    sum = 100
                },
                new Order()
                {
                    id = 2,
                    sku = "PR",
                    sum = 200
                },
                new Order()
                {
                    id = 1,
                    sku = "VR",
                    sum = 150
                }
            };

            var result = orders.GroupBy(i => i.id).
                Select(i => new
                {
                    id = i.Key,
                    sum = i.Sum(s => s.sum),
                    sku = i.Select(s => s.sku)
                });
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@OwDafuq
Не понятно какой должен быть масси для поля Sku, но без него будет выглядеть как-то так:
class Program
{
	static void Main(string[] args)
	{
		string rawJson = File.ReadAllText("data.json"); // for example
		OrderCollection orders = JsonConvert.DeserializeObject<OrderCollection>(rawJson);

		foreach (var item in orders.Orders.GroupBy(x => x.Id))
		{
			Console.WriteLine($"Order id: {item.Key}, sum: {item.Sum(x => x.Sum)}");
		}
	}
}

class OrderCollection
{
	public List<Order> Orders { get; set; }
}

class Order
{
	public int Id { get; set; }
	public string Sku { get; set; }
	public int Sum { get; set; }
}

5c178d80a1678903608751.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы