最近被問到怎麼將GroupBy 後的資料,怎麼把他們的欄位合併的問題,所以就順手寫了一篇。
先把簡單的答案放在這裡:
var data = dataList.GroupBy(p => p.Id).Select(g => new TestModel() { Id = g.Key, info = string.Join(',', g.Select(p => p.info).ToList()) });
這邊我就就從頭說起,假如我有四筆資料如下:
var dataList = new List<TestModel>()
{
new TestModel() {Id = "C8763", info = "9527",},
new TestModel() {Id = "C8763", info = "7704",},
new TestModel() {Id = "C8763", info = "7706",},
new TestModel() {Id = "C9487", info = "7706",},
};
當我的有個期望,要把C8763的資料統整起來,Info我要用逗點隔開的資料如下:
[
{
"id": "C8763",
"info": "9527,7704,7706"
},
{
"id": "C9487",
"info": "7706"
}
]
我用以下方法得到我要的期望結果:
var data = dataList.GroupBy(p => p.Id).Select(g =>
{
// 取得 group by 後的第一筆資料作為基準
var result = g.FirstOrDefault() ?? new TestModel();
// 然後把相同Key 的Account 都取出來拼起來丟進result
result.info = string.Join(',', g.Select(p => p.info).ToList());
return result;
});
這樣就大功告成了,常常遇到很多新手階段的人搞不懂 GroupBy出來的型態,常常會想要把GroupBy完的型態直接丟給原物件去接,想當然一定會看到一大條紅紅的毛毛蟲。
如有指正之處,歡迎隨時提出