Dùng LINQ chuyển dữ liệu cấu trúc lồng (Nested) sang cấu trúc phẳng (Flat) dạng inner join

Lần trước tôi có làm cái tip dùng LinQ chuyển dữ liệu cấu trúc lồng sang cấu trúc phẳng: https://vkhangyang.wordpress.com/2013/08/07/dng-linq-chuyen-du-lieu-cau-trc-phang-flat-sang-cau-trc-long-nested/

Lần này sẽ làm ngược lại:

Giả sử ta có trước cấu trúc lồng

            var nestedArray = new[] { 
                new {
                    CategoryId = 1,
                    CategoryName = "Office",
                    Products = new []{
                        new {
                            ProductId = 1,
                            ProductName = "Word"
                        },
                        new {
                            ProductId = 2,
                            ProductName = "Excel"
                        },
                        new {
                            ProductId = 3,
                            ProductName = "FrontPage"
                        }
                    }
                },
                new {
                    CategoryId = 2,
                    CategoryName = "IDE",
                    Products = new []{
                        new {
                            ProductId = 4,
                            ProductName = "DevC++"
                        },
                        new {
                            ProductId = 5,
                            ProductName = "Xcode"
                        }
                    }
                },
                new {
                    CategoryId = 3,
                    CategoryName = "Browser",
                    Products = new []{}
                },
            };

Với việc vận dụng phương thức SelectMany mà LINQ cung cấp:

            var flatArray = nestedArray
                .SelectMany(p => p.Products
                    .Select(q => new { 
                        CategoryId = p.CategoryId,
                        CategoryName = p.CategoryName,
                        ProductId = q.ProductId,
                        ProductName = q.ProductName
                    })
            );

Cấu trúc phẳng sẽ được tạo ra:

{
        CategoryId: 1,
        CategoryName: Office,
        ProductId: 1,
        ProductName: Word
},
{
        CategoryId: 1,
        CategoryName: Office,
        ProductId: 2,
        ProductName: Excel
},
{
        CategoryId: 1,
        CategoryName: Office,
        ProductId: 3,
        ProductName: FrontPage
},
{
        CategoryId: 2,
        CategoryName: IDE,
        ProductId: 4,
        ProductName: DevC++
},
{
        CategoryId: 2,
        CategoryName: IDE,
        ProductId: 5,
        ProductName: Xcode
}

 

Cấu trúc phẳng khá phổ biến khi gặp 1 số trường hợp làm đầu vào cho 1 số UI Control, export ra thông tin….

Với tính năng LINQ, việc chuyển đổi các cấu trúc sẽ được đơn giản hóa đi nhiều mà không cần phải viết những lệnh lặp dài dòng

One response to “Dùng LINQ chuyển dữ liệu cấu trúc lồng (Nested) sang cấu trúc phẳng (Flat) dạng inner join

  1. Pingback: Dùng LINQ chuyển dữ liệu cấu trúc lồng (Nested) sang cấu trúc phẳng (Flat) dạng left join | CHUNG VĨNH KHANG'S BLOG·

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s