- 浏览: 492228 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
复合的 from 子句
如果需要根据对象的一个成员进行过滤,而该成员本身是一个集合,就可以使用复合的 from 子句。
Racer 类定义了一个属性 Cars, Cars 是一个字符串数组。
要过滤驾驶 Ferrari 的所有冠军, 可以使用如下所示的 LINQ 查询。
第一个 from 子句访问从 Formyla1.GetChampions()返回的Racer 对象,
第二个 from 子句访问 Racer 类的属性 Cars,返回所有的string 类型的赛车。
接着在 Where 子句中使用这些赛车过滤驾驶 Ferrari 的所有车手
并使用LastName升序
private static void CompoundFrom() { var fd = from r in Formula1.GetChampions() from c in r.Cars where c == "Ferrari" orderby r.LastName select r.FirstName + " " + r.LastName; foreach (var racer in fd) { Console.WriteLine(racer); } }
结果把Cas中带有Ferrari 的9个车手名字列了出来:
C#编译器把复合的 from 子句和 LINQ 查询转换为 SelectMany()扩展方法。SelectMany()可用于迭代集合
中的集合。示例中 SelectMany()方法的重载版本如下所示:
public static IEnumerable < TResult > SelectMany < TSource, TCollection, TResult > (
this IEnumerable < TSource > source,
Func < TSource, IEnumerable < TCollection > > collectionSelector,
Func < TSource, TCollection, TResult > resultSelector);
下面的程序就是调用这个扩展方法,说明如下:
1.第一个参数是隐式参数,从 GetChampions()方法中接收 Racer 对象序列。
2.第二个参数(r => r.Cars)是 collectionSelector 委托,它定义了内部集合。在λ表达式r=>r.Cars 中,应返回赛车集合。r 本身是R集合,用这个又得到了Cars集合
3.第三个参数是一个委托,现在为每个赛车调用该委托,接收 Racer 和 Car 对象。
4.λ表达式创建了一个匿名类型,它带 Racer1 和 Car1 属性。匿名对象的 Racer1属性附上了r,Car1属性附上了c,属性名随意定的
5.这个SelectMany()方法的结果是摊平了赛手和赛车的层次结构,
5.为每辆赛车返回匿名类型的一个新对象集合。
这个新集合传送给Where()方法,过滤出驾驶 Ferrari 的赛手。最后,调用OrderBy()和Select()方法:
/// <summary> /// 复合的from子句 /// </summary> private static void CompoundFrom() { var fd = Formula1.GetChampions(). SelectMany( r => r.Cars, (r, c) => new { Racer1 = r, Car1 = c }). Where(r => r.Car1 == "Ferrari"). OrderBy(r => r.Racer1.LastName). Select(r => r.Racer1.FirstName + " " + r.Racer1.LastName); foreach (var racer in fd) { Console.WriteLine(racer); } }
结果和上面一样
把 SelectMany()泛型方法解析为这里使用的类型,所解析的类型如下所示。
在这个例子中,数据源是 Racer 类型,所过滤的集合是一个string 数组,当然所返回的匿名类型的名称是未知的,
这里显示为 TResult:
public static IEnumerable < TResult > SelectMany < Racer, string, TResult > (
this IEnumerable < Racer > source, //Formula1.GetChampions()的结果
Func < Racer, IEnumerable < string > > collectionSelector, // SelectMany( r => r.Cars,中的 r => r.Cars, 返回结果集为 IEnumerable < string >
Func < Racer, string, TResult > resultSelector); //(r, c) => new { Racer1 = r, Car1 = c }). // r, c, => new {} 返回结果为
TResult 到r 表达式左式的第一个参数r
查询仅从 LINQ 查询转换为扩展方法,所以结果与前面的相同。
发表评论
-
LINQ to SQL语句之Insert/Update/Delete操作
2009-12-30 14:54 1107Insert/Update/Delete操作 插入(Ins ... -
RabbitMQ 安装配置和简单实例
2010-01-21 16:52 1824安装ErLang运行环境 配置运行环境变量 启动服务 ... -
MSMQ(Microsoft Message Queue,微软消息队列) Asp.Net 简单示例
2010-01-22 14:59 3253系统: Windows XP 1.安装MSMQ 控制面板—&g ... -
IromPython .Net 的简介和第一个例子
2010-01-23 18:53 1341.Net 4 都已经到来 ... -
Microsoft Asp.Net MVC 从入门到精通
2010-01-27 17:53 836ASP.NET MVC Framework是微软官方提供的MV ... -
C# Socket 同步通信与异步通信 示例
2010-01-30 17:50 4734同步 1.建立链接发送和获取信息 异步 1.服务器端建立一 ... -
解决 Visual Stuido 工具栏中的工具重置后,恢复回来。
2009-12-18 17:06 1245拿DevExpress 控件为例,如果重置工具栏后,以前的工具 ... -
LINQ to SQL 用O/R设计器手工建表对象
2009-10-11 22:04 1016除了自己建立定制对象外,还可以使用O/R设计器以可视化的方式创 ... -
LINQ to XML .Net 3.5 中的新XML对象
2009-10-15 14:11 885System.Xml.Linq 命名空间中,有一系列新的LIN ... -
LINQ to XML 用 LINQ 查询 XML
2009-10-15 15:57 671将一个已知的XML放到XDocument 对象当中使用LINQ ... -
LINQ to XML 操作XML文档
2009-10-15 17:18 973使用 XDocument 对象的 Element 方法,获取制 ... -
C# 编码规范
2009-10-15 19:20 722陈年的文档,不过很不错整理出来发到博客上,还有更多的朋友需要。 ... -
Visual Studio 项目模板、文件模板、代码段和环境设置
2009-10-15 19:31 934很久前使用过,那个时候还没有开始写博客,好久不用就都忘记了,这 ... -
ADO.NET Entity Framework 概述
2009-10-16 11:50 563ADO.NET Entity Framework 与 LINQ ... -
LinqPad 1.31 下载
2009-01-14 15:42 965LinqPad 1.31 也许你已经非常熟悉他了,为即将使用L ... -
jQuery 的第一个例子
2009-01-18 10:34 790通过这个例子可以对jQuery的使用有个基本的认识,jQ ... -
jQuery 选择器的使用
2009-01-18 10:39 831jQuery 能如此的流行,很重要的一点也许就是他有非常强大且 ... -
一次从GridView 获得多个指定行中多个指定控件的值
2009-01-20 07:33 868一次从GridView 获得多个指定行中多个指定控件的值,非常 ... -
jQuery 的Ajax应用(1)--学习篇,内附实例
2009-01-28 21:48 1324下面以前台jQuery,后天C# 的方式,演示了,如何通过 ... -
Enterprise Library 4.1 一步一步从入门到精通(未完成)
2009-02-05 23:04 887Enterprise Library 4.1 一步一步从入门到 ...
相关推荐
第14章 支持标准查询操作符的集合接口 385 14.1 匿名类型和隐式类型的局部变量声明 386 14.1.1 匿名类型 386 14.1.2 隐式类型的局部变量 387 14.1.3 匿名类型和隐式局部变量的更多注意事项 388 ...
第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...
在 C# 中撰写 LINQ 查询 336 查询对象集合 339 从方法传回查询 341 将查询的结果储存在内存中 343 使用各种不同方式分组结果 344 将群组包含在群组中 352 针对分组作业执行子查询 353 在运行时间动态指定述词筛选...
6.1.2 AsOrdered和orderby子句 6.2 指定执行模式 6.3 理解PLINQ中的数据分区 6.4 通过PLINQ执行归约操作 6.5 创建自定义的PLINQ聚合函数 6.6 并发PLINQ任务 6.7 取消PLINQ 6.8 指定所需的并行度 6.8.1 ...