什么是Linq的延迟加载
1、LookUp<TKey,TElement>
转载于http://www.cnblogs.com/multiplesoftware/archive/2011/03/31/2000528.html
class Program { static void Main(string[] args) { var products = GetList(); // Lookup<Tkey,TElement>需要调用扩展方法ToLookup创建, var groups = products.ToLookup(p => p.Category); // Linq的Group有延迟加载 //var groups = products.GroupBy(p => p.Category); products.RemoveAll(p => p.Category == "Electronics"); foreach (var group in groups) { Console.WriteLine(group.Key); PrintCategory(groups, group.Key); } Console.Read(); } private static void PrintCategory(ILookup<string, Product> productsByCategory, string categoryName) { foreach (var item in productsByCategory[categoryName]) { Console.WriteLine("\t" + item); } } 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; } } 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); } }