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>();
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集合已經去重變成自己想要的資料格式列表了。