LINQ学习笔记:Join和Group Join(3)_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

LINQ学习笔记:Join和Group Join(3)

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:笔记学习一个
黑客防线网安网讯:   连接和LookupsEnumerable当中的Join和GroupJoin使用两个步骤来工作. 首先, 它们将inner序列加载到一个lookup当中, 然后再将一个outer序列和这个lookup组合在一起.一个lookup是一个分组序...

   连接和Lookups

Enumerable当中的Join和GroupJoin使用两个步骤来工作. 首先, 它们将inner序列加载到一个lookup当中, 然后再将一个outer序列和这个lookup组合在一起.

一个lookup是一个分组序列, 并且可以通过键直接访问, 或者你可以认为它是一个序列字典, 每一个键可以接受多个元素. 并且lookup是只读的, 定以如下:

   1: public interface ILookup :   2:     3:    IEnumerable>, IEnumerable   4:     5: {   6:     7:   int Count { get; }   8:     9:   bool Contains (TKey key);  10:    11:   IEnumerable this [TKey key] { get; }  12:    13: }

当处理本地集合的时候, 我们可以使用joining操作符作为一个额外的可选策略来手工创建或者查询lookups, 这允许你在多个查询上面重用相同的lookup.

ToLookup扩展方法创建了一个lookup. 以下的例子将所有的purchases加载到一个lookup当中去, 它们的关键是CustomerID字段.

   1: ILookup<int?,Purchase> purchLookup =   2:     3:   purchases. ToLookup (p => p.CustomerID, p => p);

第一个参数选择了键, 第二个参数选取那些作为值被加载到lookup的对象.

读取一个lookup就像在读取一个字典 除非indexer返回了包含匹配项的序列, 而不是简单的匹配. 以下的例子枚举了ID是1的客户采购订单:

   1: foreach (Purchase p in purchLookup [1])   2:     3:   Console.WriteLine (p.Description);

在适当的位置使用lookup, 我们可以让SelectMany / Select查询执行得跟Join / GroupJoin一样有效率. 在一个lookup上面使用SelectMany与Join是等价的:

   1: from c in customers   2:     3: from p in purchLookup [c.ID]   4:     5: select new { c.Name, p.Description, p.Price };   6:     7: Tom Bike 500   8:     9: Tom Holiday 2000  10:    11: Dick Bike 600  12:    13: Dick Phone 300  14: ...

增加一个DefaultIfEmpty的调用可以让此查询变成一个Outer Join:

   1: from c in customers   2:     3: from p in purchLookup [c.ID].DefaultIfEmpty()   4:     5: select new   6:     7: {   8:     9:   c.Name,  10:    11:   Descript = p == null ? null :p.Description,  12:    13:   Price = p == null ? (decimal?) null :p.Price  14:    15: };

在projection内读lookup与GroupJoin是等价的:

   1: from c in customers   2:     3: select new {   4:     5:              CustName = c.Name,   6:     7:              CustPurchases = purchLookup [c.ID]   8:     9:            };

待续!

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-10816-1.html
网站维护教程更新时间:2012-03-21 03:10:48  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer