当前位置:编程学习 > C#/ASP.NET >>

C# 中奇妙的函数 -- 1. ToLookup

这个系列,我和大家一起来学学C#中一些非常有用函数,对于有些人来说可能它们不起眼,因此常常忽略它们。它们不会嚷嚷到:“使用我吧!我会让你节省很多的时间,而且让你的代码变得更加的简洁!” -- 但是,这些话会从对它们熟悉的程序员的脑海中涌现出来。

好的!先来看看ToLookup:

下文参考翻译自:

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

故事的背景

让我们先来创建一个简单的类来表示产品,产品有ID,类别,和价格,这个类没有什么特别:

     public sealed class Product
    {
        public int Id { get; set; }
        public string Category { get; set; }
        public double Value { get; set; }
        

        public override string ToString()
        {
            return string.Format("[{0}: {1} - {2}]", Id, Category, Value);
        }
    }

然后我们加入一个函数得到一个产品的列表,当然你也可以从数据库中读取出来:

        public static List<Product> GetList()
        {
            var products = new List<Product>
                               {
               new Product {Id = 1, Category = "Electronics", Value = 15.0},
               new Product {Id = 2, Category = "Groceries", Value = 40.0},
              new Product {Id = 3, Category = "Garden", Value = 210.3},
         new Product {Id = 4, Category = "Pets", Value = 2.1},
            new Product {Id = 5, Category = "Electronics", Value = 19.95},
           new Product {Id = 6, Category = "Pets", Value = 21.25},
          new Product {Id = 7, Category = "Pets", Value = 5.50},
          new Product {Id = 8, Category = "Garden", Value = 13.0},
         new Product {Id = 9, Category = "Automotive", Value = 10.0},
     new Product {Id = 10, Category = "Electronics", Value = 250.0},
                               };
            return products;
        }


我们有一个任务就是按类别列出一个物品清单,这个非常的容易,用GroupBy 就可以实现了:

             foreach (var group in products.GroupBy(p => p.Category))
            {
                Console.WriteLine(group.Key);
                foreach (var item in group)
                {
                    Console.WriteLine("	" + item);
                }
            }


看起来一切都很好,没有什么问题.

当我们使用 GroupBy() 扩展方法时,使用了延迟执行。 这意味着,当你遍历集合的时候,下一个要出现的项目可能会或者可能不会被加载。 这是一个很大的性能改进,但它会引起有趣的副作用。

在用 GroupBy()时,  它实际上是在第一项被使用的时候创建分组,而不是在 GroupBy() 第一次被调用时。

考虑一下:如果你从数据库中加载数据,然后想组合到一起,并存储快速查找。  看下面的一段代码:

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,