C# ToLookup


下文參考翻譯自:

C#/.NET Little Wonders: The ToLookup() LINQ Extension Method

故事的背景

讓我們先來創建一個簡單的類來表示產品,產品有ID,類別,和價格,這個類沒有什么特別:

 

然后我們加入一個函數得到一個產品的列表,當然你也可以從數據庫中讀取出來:

 


我們有一個任務就是按類別列出一個物品清單,這個非常的容易,用GroupBy 就可以實現了:

 


看起來一切都很好,沒有什么問題.

當我們使用 GroupBy() 擴展方法時,使用了延遲執行。 這意味着,當你遍歷集合的時候,下一個要出現的項目可能會或者可能不會被加載。 這是一個很大的性能改進,但它會引起有趣的副作用。

在用 GroupBy()時,  它實際上是在第一項被使用的時候創建分組,而不是在 GroupBy() 第一次被調用時。

考慮一下:如果你從數據庫中加載數據,然后想組合到一起,並存儲快速查找。  看下面的一段代碼:

 


執行后發現,所有的Garden產品都已經消失了,但是 groups 是在執行刪除命令前就已經賦值了。

基於這種情況,我們不得不使用ToDictionary() 將GroupBy 后的結果儲存起來,這樣一來工作量就增加了,而且維護也不太方便 -- 請大家試試。

ToLookup登場

現在我們有請ToLookup。

ToLookup() 方法創建一個類似 字典(Dictionary ) 的列表List, 但是它是一個新的 .NET Collection 叫做 lookup。 Lookup,不像Dictionary, 是不可改變的。 這意味着一旦你創建一個lookup, 你不能添加或刪除元素。

 

 

你還可以使用類似索引的功能得到某個項目,在本案例中是得到某個類別的所有產品:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM