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>();
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集合已经去重变成自己想要的数据格式列表了。