zoukankan      html  css  js  c++  java
  • 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, 你不能添加或删除元素。

     

     

    你还可以使用类似索引的功能得到某个项目,在本案例中是得到某个类别的所有产品:

     

  • 相关阅读:
    .Net学习难点讨论系列2 – 细说C#中new关键字与多态
    [翻译]搜索关键字 – 管道与过滤器模式(PipesandFilters)与装饰模式(Decorator)之间的关系
    .Net学习难点讨论系列1 – 委托与事件之事件
    [翻译]Popfly系列课程1 Popfly课程计划概览
    常用桌面虚拟化软件横向对比
    各种算法的C#实现系列1 合并排序的原理及代码分析
    博客园安家
    疑:Microsoft® Silverlight™ Tools for Visual Studio 2008 SP1的版本让人困惑
    stream_socket_client
    stream_socket_client2
  • 原文地址:https://www.cnblogs.com/qixuejia/p/7284063.html
Copyright © 2011-2022 走看看