Linq
1. 將List 或是DataTable 轉成一個Dictionary的物件
通常而言我們可能會從DataBase裡面撈出一個需要運算的資料,再做一些複雜的運算並呈現在報表上
然而DataTable的資料通常不會是我們要的,所以在整理資料的過程,我們可以整理出適合的架構來幫助我們
利用Linq的既有功能可以幫我們少寫好幾段程式碼
public class clsTrainingMappingRelation
{
public string Trainer { set; get; }
public string BeTrainedPerson { set; get; }
}
List<clsTrainingMappingRelation> lstTrainingRelation = new List<clsTrainingMappingRelation>();
lstTrainingRelation.Add(new clsTrainingMappingRelation() { Trainer = "Ace", BeTrainedPerson = "A" });
lstTrainingRelation.Add(new clsTrainingMappingRelation() { Trainer = "Ace", BeTrainedPerson = "B" });
lstTrainingRelation.Add(new clsTrainingMappingRelation() { Trainer = "Teacher", BeTrainedPerson = "Ace" });
lstTrainingRelation.Add(new clsTrainingMappingRelation() { Trainer = "Teacher", BeTrainedPerson = "B" });
var result = lstTrainingRelation.GroupBy(m => m.Trainer)
.ToDictionary(m => m.Key, m => m.ToList());
List<string> lstTrainingMember = result["Ace"].Select(m => m.BeTrainedPerson).ToList();
2. 使用SelectMany 將原始資料還原
由於上述我們在GroupBy的時候將整個class選至Dictionary的values裡去了,所以在還原的時候相當方便,只要將values的資料select回來即可
var RollbackToTable = result.Values.SelectMany(m => m);
亦或是透過兩個from 來做到第一層是for each key,第二層再由該key對應到的value有幾個class來做到第二層的動態 join
這樣的方式更有彈性,可讀性也不錯
將Dictionary的資料展平,問了google大神後才發現這種方式是叫 Flatten
var RollbackToTable = (from _k in result
from _v in _k.Value
select new
{
_key = _k.Key,
_value = _v.BeTrainedPerson
}).ToList();