Maaf untuk judul yang tidak jelas ini, tetapi saya tidak yakin bagaimana menamainya. Akan lebih mudah untuk menunjukkannya:

Contoh objek:

class Order
  {
     public string OrderNumber{ get; set; }
     public IEnumerable<ProductWithQuantity> ProductsWithQuantities{ get; set; }
  }

class ProductWithQuantity
  {
     public string ProductName{ get; set; }
     public int Quantity{ get; set; }
  }

Katakanlah saya punya IEnumerable<Order> dan setiap pesanan memiliki daftar produk bersama dengan kuantitas. Pesanan selalu memiliki daftar produk yang sama, hanya jumlah yang berbeda. Sekarang ini semua dikelompokkan berdasarkan pesanan, bagaimana membalikkannya untuk dikelompokkan berdasarkan produk.

Untuk memvisualisasikannya dengan lebih baik, saya akan menunjukkan apa yang ingin saya capai pada pseudo jsons.

Json saat ini dihasilkan:

[
    {
        OrderNumber,
        ProductsWithQuantities [
            {ProductName, Quantity}
        ]
    }
]

Dan saya ingin mencapai sesuatu seperti ini:

[
    {
        ProductName,
        OrdersWithQuantities [
            {OrderNumber, Quantity}
        ]
    }
]

Saya mencoba menggunakan pilih dan kelompokkan tetapi saya tidak berhasil.

0
kkamil4sz 21 April 2020, 16:26

1 menjawab

Jawaban Terbaik

1 - Dengan mempertimbangkan kumpulan tes berikut:

List<Order> orders = new List<Order>
{
    new Order
    {
        OrderNumber = "o1",
        ProductsWithQuantities = new List<ProductWithQuantity>
        {
            new ProductWithQuantity{ProductName = "p1", Quantity=1},
            new ProductWithQuantity{ProductName = "p2", Quantity=2},
        }
    },
    new Order
    {
        OrderNumber = "o2",
        ProductsWithQuantities = new List<ProductWithQuantity>
        {
            new ProductWithQuantity{ProductName = "p1", Quantity=1},
            new ProductWithQuantity{ProductName = "p2", Quantity=2},
        }
    }
};

2 - Anda dapat menggunakan SelectManay untuk meratakan semua produk. dan kelompokkan menurut ProductName dengan membuat koleksi baru, seperti kode berikut:

var result = orders
    .SelectMany(x => x.ProductsWithQuantities.Select(y => new { x.OrderNumber, y.ProductName, y.Quantity }))
    .GroupBy(p => p.ProductName)
    .Select(x => new 
        { 
            ProductName = x.Key, 
            OrderWithQuantities = x.Select(y => new { OrderNumer = y.OrderNumber, Quantity = y.Quantity }).ToList() 
        })
    .ToList();

3 - Demo

foreach(var item in result)
{
    Console.WriteLine($"{item.ProductName} : " +
        $"{string.Join(",", item.OrderWithQuantities.Select(x => $"{x.OrderNumer}::{x.Quantity}"))}");
}

4 - Hasil:

p1 : o1::1,o2::1
p2 : o1::2,o2::2

Saya harap ini membantu.

1
Mohammed Sajid 21 April 2020, 14:38