Linq之归类排序问题及group by返回一个具体类的处理

不久之前遇到一个需求,要求对数据根据某些字段归类之后再根据某个字段排序,比如有以下数据

SeqNo 名称 规格
110 分片式电容 分片式
110 分片式电容 分片式
66 电阻 100
66 电阻 100
60 电阻 12
50 电感 120
122 变压器 200
122 变压器 200
111 333 333

处理之后的数据是

SeqNo 名称 规格
110-1 分片式电容 分片式
110-2 分片式电容 分片式
66-1 电阻 100
66-2 电阻 100
60-1

电阻

 

12
50-1 电感 120
122-1 变压器 200
122-2 变压器 200
111-1 333 333

 挠破头之后相处了以下解决办法

 List<A> mainDetails = (from s in details
                                                          group s by new { s.DescCn,  s.ModelCn, s.SeqNo } into sg
                                                          select new A
                                                          {
                                                              DescCn = sg.Key.DescCn,
                                                              ModelCn = sg.Key.ModelCn,
                                                              SeqNo = sg.Key.SeqNo
                                                          }).OrderBy(p => p.SeqNo).ToList();
                //归类之后再排序
                List<string> seqNoList = mainDetails.Select(p => p.SeqNo).Distinct().ToList();
                int i = 1;
                List<A> needDetails = new List<A>();
                foreach (string item in seqNoList)
                {
                    var centerDetails = mainDetails.Where(p => p.SeqNo == item).ToList();
                    centerDetails.ForEach(p => p.SeqNo = p.SeqNo + "-" + i++);
                    needDetails.AddRange(centerDetails);
                    i = 1;
                }

难点:1.因为之前很少用到linq的group by ,所以不知道怎么返回一个具体的类型的类,其实只要在select那里new一个对象A,用List<A>接受就好了

2.排序的话是先找相同的seqNo的个数,再循环复制,ForEach是个好东西,之前没用过,哈哈。

posted @ 2017-12-28 15:40  LikeWindPlus  阅读(710)  评论(0编辑  收藏  举报