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; }
}