[Record] Linq 如何使用 Groupby 合併二階資料

Linq 使用 Groupby 合併二階資料記錄

概述

由於手上具有大量資料,並且需要將種類與次種類的數據進行統計,故使用 Linq 的 Groupby 將二階資料進行合併計算

正文

資料可能如下:

var test = new List<model>
	{
		new model {Id = 1, group = "a", project = "a", score = 10},
		new model {Id = 2, group = "a", project = "a", score = 10},
		new model {Id = 3, group = "a", project = "b", score = 20},
		new model {Id = 4, group = "a", project = "c", score = 30},
		new model {Id = 5, group = "b", project = "a", score = 10},
		new model {Id = 6, group = "b", project = "b", score = 20},
		new model {Id = 7, group = "c", project = "a", score = 10},
	};

Table 顯示如下:

使用方法:

var data = test.GroupBy(X => new
	{
		X.group,
		X.project
	}).Select(Y => new
	{
		group = Y.Key.group,
		project = Y.Key.project,
		score = Y.Sum(Z => Z.score)
	});

GroupBy 可以直接將兩個 Column 相同的值進行 GroupBy,這是我之前不熟悉,所以不知道的

GroupBy 後將需要的資料再進行 Select 即可得到我們想要的數據

輸出結果如下:

以上我們可以看到 Group A 的兩個 Project A 分數都被合併

 

完整程式碼:

void Main()
{
	var test = new List<model>
	{
		new model {Id = 1, group = "a", project = "a", score = 10},
		new model {Id = 2, group = "a", project = "a", score = 10},
		new model {Id = 3, group = "a", project = "b", score = 20},
		new model {Id = 4, group = "a", project = "c", score = 30},
		new model {Id = 5, group = "b", project = "a", score = 10},
		new model {Id = 6, group = "b", project = "b", score = 20},
		new model {Id = 7, group = "c", project = "a", score = 10},
	};
	
	var data = test.GroupBy(X => new
	{
		X.group,
		X.project
	}).Select(Y => new
	{
		group = Y.Key.group,
		project = Y.Key.project,
		score = Y.Sum(Z => Z.score)
	});
}

public class model
{
	public int Id { get; set; }
	public string group { get; set; }
	public string project { get; set; }
	public int score { get; set; }
}

 

分級: 入門是認識, 基本是運用, 進階是混合結合
範本是已可下載或可使用的範例, 至於教程當然是學習的結晶