LINQ小筆記


LINQ主要形式

Filter : 條件篩選 e.g. Where、Distinct、OfType
Merge : 把兩個集合和在一起 e.g. Zip
Transform : 從一個集合轉換成另外一個集合,e.g. Select、SelectMany、ToList
Sort : 排序 e.g. OrderBy
Fetch : 取值 e.g. First、FirstOrDefault、Chunk(.NET 7)
Aggregation : 運算 e.g. Sum、Average、Max..
Generate : Repeat、Range
Check and others : All、Any、Concat、Union…

延遲執行(Deferred Execution)

  1. 呼叫當下只取到 IEnumerable 物件
  2. 真正開始取值時,整個LINQ 運算才會開始做
    💡 LINQ 在呼叫 select 時,還沒有引發查詢動作,真正引發動作會是在 foreach,也就是 IEnumerator.MoveNext()。

LINQ是正著寫、倒著跑、會跟前面拿資料

var b = list.OrderBy(a=>a).Where(a=> a>3); //這邊的where跟前面的Order by 取資料
var c = list.Where(a => a > 2).OrderBy(a => a);

Single v.s. First

如果資料確定只有一筆,要用Single v.s. First哪個比較好?
⇒ 雖然Single會把資料全部跑完,造成效能較低,但就實際面會滿足需求
⇒ 所以要看是效能優先還是reliable優先

Count效能問題

  • 會透過條件計算,從頭跑到尾
  • 當資料集無法轉為ICollection時,會從頭跑到尾
  • 可轉為ICollection 時會直接呼叫ICollection.Count
    • 沒有效能問題,但多一個函式呼叫,如果已知是 ICollection,不要用 Count()

結論

  1. 只要可以變成IEnumerable都可以用LINQ
  2. 順序很重要
  3. .net 7新增很多好用的東西

Reference

[.NET]快快樂樂學LINQ系列前哨戰-延遲執行 (Deferred Execution) | In 91 - 點部落

#C# #linq






你可能感興趣的文章

[CSS] 切版眉角的部份

[CSS] 切版眉角的部份

CH1 策略模式(Strategy Pattern)

CH1 策略模式(Strategy Pattern)

TypeScript 函式定義字串型別相連和JavaScript String.prototype.concat() 的差異

TypeScript 函式定義字串型別相連和JavaScript String.prototype.concat() 的差異






留言討論