【Basic Code】List集合合并相关项

来源:互联网 发布:淘宝服装一件代发货源 编辑:程序博客网 时间:2024/06/06 03:18
       如下图所示:

       这张表是个会员卡事件记录表,每条记录代表1次针对套餐的操作,其中根据Event字段来进行取分,Event为1代表“开卡”,2代表“充值”,3代表“换卡”,4代表“补卡”,5代表“退卡”,可以看到前两条数据分别是开卡和充值,而且LaeguerId相同,代表为同一张会员卡分别进行了开卡和充值操作;看第3、4、条记录,Event指为3,则代表将1、2的对应套餐换到了别的卡上,即客户进行了“换卡”操作,此时第1条数据被复制到第3条,第2条数据被复制到第4条,Event字段被置为3.同理,就像我用线标出的一样,执行换卡和补卡操作后,会复制之前的记录到新的LeaguerId名下。

       问题:

       界面上要显示的换卡记录得条数是按照套餐数量来输出的,就像1,2,被换到了3,4,虽然LeaguerId为1的会员有两条套餐被换了,其实执行了一次换卡动作,那么界面上就要显示一条记录,而不是两条。

       解决方案:

       changeCardList是经过筛选后Event为3的,即将显示在界面上的List,对其分组(根据LeaguerId),遍历每一个分组结果,取其第一条记录,这个过程需要再次从IEnumerable转换为List,但是换卡后的游戏点数依旧是取和,foreach外定义list,用于承接新的返回值。

var cclist = changeCardList.GroupBy(a => a.LeaguerId); //用LeaguerId做标识foreach (var c in cclist){  var changelist = c.ToList();   //cclist是IEnumerable类型的数据,需要将其转为List  LeKeCardInfo changeCard = new LeKeCardInfo();  changeCard = changelist[0];    //取第一条  foreach (var change in changelist)  {     changeCard.Point += change.Point; //将其中的Point求和  }  list.Add(changeCard);}return list;
           这段代码,做到了既合并了相关项,同时进行了Point值得求和运算,集成到一个方法中,简单,直观。

0 0