C# list<>集合去重

list集合中有重复数据 ,比如此数据如下

list[1]   ‘北京市’ ,1,11

list[2]   '北京市',2,12

list[3]  '北京市', 3,13

list[4] '上海市',2,15


list里边就是装的这样的数据。

匹配的Model为:

string        int      int

address,type, number

省市,类型,数量

现在想把数据归类为

地址  类型1 类型2 类型3

北京   11      12        13

上海    0       15          0


思路:首先就要对地区进行筛选去重

             然后迭代唯一地区字符串,组合不同类型的数量

如何进行筛选去重?

使用拉姆达表达式。把list集合看做一张表,拉姆达就是相当sql语句一般,对这张表进行操作。

定义一个新的Model进行新的数据格式匹配

string        int                         int                  int

address,type1number , type2number,type3number

定义一个新的List<newModel>的集合,好接受新表格式

 List<newModel>  newData = new List<newModel>();

  //1.去重地区名字,datalist为原来有重复地区的list集合

   List<string> addresses = dataList.Select(m => m.address.Trim()).Distinct().ToList();  //跟sql数据库中distinct关键词一样对应。去重select语句

  // 2. 迭代唯一地区字符串,组合不同类型招聘的数量
                foreach (string addr in addresses)
                {
                   newModel data = new newModel();
                    {
                           address = addr
                    };

                     data.fType1number = dataList.Where(m => (m.address.Trim() == addr && m.type == 0)).Sum(m => m.number); 
                     data.fType2number = dataList.Where(m => m.address.Trim() == addr && m.type == 1).Sum(m => m.number);
                     data.fType3number = dataList.Where(m => m.address.Trim() == addr && m.type == 2).Sum(m => m.number);

                    //跟sql数据库中where条件查询对应,然后这里返回的是一个list集合,所以进行sum函数加总,即使这种返回的list集合只有一列,但如果这一列为空的话,此时没用sum函数或者使用的FirstOrDefault,则会报空。此处使用sum函数就是预防不报空,直接加总为0.

                     newData.Add(data);  //置入新的集合
                }

此时的newData这个list集合已经去重变成自己想要的数据格式列表了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值