c# 通过orderBy 进行分组

有时候我们需要数据根据一些字段进行分组,这时候用orderBy很方便。不多说了。直接上代码:

 class Ma
        {
            public int number { get; set; }
            public string name { get; set; }

            public static List<Ma> ToThis()
            {
                List<Ma> ls = new List<Ma>()
                {
                    new Ma() { number = 1, name = "第一组1" },
                     new Ma() { number = 1, name = "第一组ss" },
                      new Ma() { number = 1, name = "第一组rr" },
                       new Ma() { number = 3, name = "第三组ss" },
                        new Ma() { number = 3, name = "第三组option" },
                         new Ma() { number = 2, name = "第二组cake" },
                 };
                return ls;
            }
        }

    //需要分组成的对象,按照number进行分组
        public class GroupMa
        {
            public int number { get; set; }
            public List<string> names { get; set; }
        }

        [TestMethod]
        public void TestGroup()
        {
            List<Ma> ls = Ma.ToThis();
            //List<GroupMa> groupDAta =
            //   (from Ma maObj in ls
            //    group maObj by maObj.number into gData
            //    select new GroupMa
            //    {
            //        number = gData.FirstOrDefault().number,
            //        names = gData.Select(c => c.name).ToList()
            //    }).ToList();
            var data = ls.GroupBy(f => f.number)
                .Select(g => new GroupMa
                {
                    number = g.FirstOrDefault().number,
                    names = g.Select(o => o.name).ToList()
                });


            Console.Write("");
        }

分组后形成的新的数据结构:

当然,对象中嵌套多层对象,分组也是可以的。

 orderDTO.sampleGroup = orderDTO.sampleInfo.GroupBy(g => g.sampleCode).Select(o => new SampleInfoGroup
                        {
                            SampleId = o.FirstOrDefault().sampleId,
                            SampleCode = o.Key,
                            sampleStatus = o.FirstOrDefault().sampleStatus,           //通过GroupBy进行分组,分组后必须用对象来装
                            CExpressCompany = o.FirstOrDefault().CExpressCompany,
                            CExpressNumber = o.FirstOrDefault().CExpressNumber,
                            Consignor = o.FirstOrDefault().Consignor,
                            outSampleStatus = o.FirstOrDefault().sampleStatus.ToString(),
                            GroupInfo = o.Select(s => new InfoGroup
                            {
                                mark = s.mark,
                                productName = s.productName,

                            }).ToList()
                        }).ToList();

还是很实用的一个东西!

猜你喜欢

转载自www.cnblogs.com/likui-bookHouse/p/9056701.html