1. 程式人生 > >C# list集合去重

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