Thursday, December 19, 2013

DataTable to Linq - Case Study : group by given column

    class Program {
        static void Main (string[] args) {
            DataTable dt = new DataTable();
            DataColumn ProdCode = new DataColumn("ProdCode");
            DataColumn ProdDesr = new DataColumn("ProdDesr");
            DataColumn OrderNo = new DataColumn("OrderNo");
            DataColumn OrderDate = new DataColumn("OrderDate");
            DataColumn CustomerNo = new DataColumn("CustomerNo");
            dt.Columns.Add(ProdCode);
            dt.Columns.Add(ProdDesr);
            dt.Columns.Add(OrderNo);
            dt.Columns.Add(OrderDate);
            dt.Columns.Add(CustomerNo);
            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < 5; j++) {
                    DataRow dr = dt.NewRow();
                    dr["ProdCode"] = "ProdCode" + i;
                    dr["ProdDesr"] = "ProdDesr" + (j - i);
                    dr["OrderNo"] = "OrderNo" + i+j;
                    dr["OrderDate"] = "OrderDate" + i + j;
                    dr["CustomerNo"] = "CustomerNo" + i + j;
                    dt.Rows.Add(dr);
                }
            }

            var val = (from s in dt.AsEnumerable()
                       //group s by new { id1 = s.Field<string>("ProdCode"), id2 = s.Field<string>("ProdDesr") } into gp
                       group s by s.Field<string>("ProdCode") into gp
                       select new Product {
                           //ProdCode = gp.Key.id1,
                           //ProdDesr = gp.Key.id2,
                           ProdCode = gp.Key,
                           ProductItems = gp.Select(i => new ProductItem {
                               OrderNo = i.Field<string>("OrderNo"),
                               OrderDate = i.Field<string>("OrderDate"),
                               CustomerNo = i.Field<string>("CustomerNo"),
                           }).ToList()
                       }).ToList();

            Console.ReadLine();
        }
    }


    public class Product {
        public string ProdCode { get; set; }
        public string ProdDesr { get; set; }
        public IList<ProductItem> ProductItems { get; set; }

    }

    public class ProductItem {
        public string OrderNo { get; set; }
        public string OrderDate { get; set; }
        public string CustomerNo { get; set; }
    }