Linq 基本功能

  • 1170
  • 0
  • C#
  • 2019-05-12

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();