- 浏览: 493599 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 交互概述图
LINQ 标准的查询操作符 转换 ToList()、ToLookup()、ToEnumerable()、ToDictionary、ToType<T>
- 博客分类:
- [随笔分类][01] .Net X
本章前面提到,查询可以推迟到访问数据项时再执行。
在迭代中使用查询,查询会执行。而使用转换操作符会立即执行查询,把结果放在数组、列表或字典中。
在下面的例子中,调用ToList()扩展方法,立即执行查询,把结果放在List<T>中:
private static void Conversion() { // query executed immediately List<Racer> racers = (from r in Formula1.GetChampions() where r.Starts > 150 //参赛超过150次的选手 orderby r.Starts descending select r).ToList(); //注意先括号再使用.ToList() foreach (var racer in racers) { Console.WriteLine("{0} {0:S}", racer); } }
把返回的对象放在列表中并没有这么简单。
例如,对于集合中从赛车到赛手的快速访问,可以使用新类Lookup<TKey, TElement>。
提示:Dictionary<TKey, TValue>只支持一个键对应一个值。
在System.Linq 命名空间的类Lookup<TKey,TElement>中,一个键可以对应多个值。这些类详见第10 章。
使用复合的from 查询,可以摊平赛手和赛车序列,创建带有Car 和Racer 属性的匿名类型。这句最关键
在返回的Lookup 对象中,键的类型应是表示汽车的string,值的类型应是Racer。
为了进行这个选择,可以给ToLookup()方法的一个重载版本传送一个键和一个元素选择器。
键选择器表示Car 属性,元素选择器表示Racer 属性。
代码的执行顺序是这样的:
private static void Conversion() { ILookup<string, Racer> racers = (from r in Formula1.GetChampions()//获得每一个赛手 from c in r.Cars //获得赛手的车子集合,遍历是每一个车子多次获得结果 select new { Car = c, //车子名 Racer = r //这个车手,如果这个车手有多部车子就会出现多个车子名,同一个车手对象的结果,然后 }).ToLookup(cr => cr.Car, cr => cr.Racer);//用车子名做Key,向里面添加车手,如果存在的Key,就会添加,不存在的Key,就建立了Key再添加 //最后的结果,就是获得了一个以所有车子为Key,对应Value是使用过此车子的车手的集合列表 if (racers.Contains("Williams")) { foreach (var williamsRacer in racers["Williams"])//访问Key是Williams的赛手集合,遍历 { Console.WriteLine(williamsRacer); // Racer 的 toString(); 方法结果 } } }用 Lookup 类的索引器访问的所有Williams 冠军如下:
Alan Jones
Keke Rosberg
Nigel Mansell
Alain Prost
Damon Hill
Jacques Villeneuve
如果需要在未类型化的集合上使用LINQ 查询,
例如ArrayList,就可以使用Cast()方法,映射成某个类型。
在下面的例子中,基于Object 类型的ArrayList 集合用Racer 对象填充。
为了定义强类型化的查询,可以使用Cast()方法。
private static void Conversion() { System.Collections.ArrayList list = new System.Collections.ArrayList(Formula1.GetChampions() as System.Collections.ICollection); var query = from r in list.Cast<Racer>() where r.Country == "USA" orderby r.Wins descending select r; foreach (var racer in query) { Console.WriteLine("{0:A}", racer); } }
发表评论
-
LINQ to SQL语句之Insert/Update/Delete操作
2009-12-30 14:54 1114Insert/Update/Delete操作 插入(Ins ... -
RabbitMQ 安装配置和简单实例
2010-01-21 16:52 1835安装ErLang运行环境 配置运行环境变量 启动服务 ... -
MSMQ(Microsoft Message Queue,微软消息队列) Asp.Net 简单示例
2010-01-22 14:59 3259系统: Windows XP 1.安装MSMQ 控制面板—&g ... -
IromPython .Net 的简介和第一个例子
2010-01-23 18:53 1344.Net 4 都已经到来 ... -
Microsoft Asp.Net MVC 从入门到精通
2010-01-27 17:53 840ASP.NET MVC Framework是微软官方提供的MV ... -
C# Socket 同步通信与异步通信 示例
2010-01-30 17:50 4735同步 1.建立链接发送和获取信息 异步 1.服务器端建立一 ... -
解决 Visual Stuido 工具栏中的工具重置后,恢复回来。
2009-12-18 17:06 1249拿DevExpress 控件为例,如果重置工具栏后,以前的工具 ... -
LINQ to SQL 用O/R设计器手工建表对象
2009-10-11 22:04 1021除了自己建立定制对象外,还可以使用O/R设计器以可视化的方式创 ... -
LINQ to XML .Net 3.5 中的新XML对象
2009-10-15 14:11 888System.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 976使用 XDocument 对象的 Element 方法,获取制 ... -
C# 编码规范
2009-10-15 19:20 727陈年的文档,不过很不错整理出来发到博客上,还有更多的朋友需要。 ... -
Visual Studio 项目模板、文件模板、代码段和环境设置
2009-10-15 19:31 941很久前使用过,那个时候还没有开始写博客,好久不用就都忘记了,这 ... -
ADO.NET Entity Framework 概述
2009-10-16 11:50 565ADO.NET Entity Framework 与 LINQ ... -
LinqPad 1.31 下载
2009-01-14 15:42 971LinqPad 1.31 也许你已经非常熟悉他了,为即将使用L ... -
jQuery 的第一个例子
2009-01-18 10:34 794通过这个例子可以对jQuery的使用有个基本的认识,jQ ... -
jQuery 选择器的使用
2009-01-18 10:39 836jQuery 能如此的流行,很重要的一点也许就是他有非常强大且 ... -
一次从GridView 获得多个指定行中多个指定控件的值
2009-01-20 07:33 871一次从GridView 获得多个指定行中多个指定控件的值,非常 ... -
jQuery 的Ajax应用(1)--学习篇,内附实例
2009-01-28 21:48 1330下面以前台jQuery,后天C# 的方式,演示了,如何通过 ... -
Enterprise Library 4.1 一步一步从入门到精通(未完成)
2009-02-05 23:04 892Enterprise Library 4.1 一步一步从入门到 ...
相关推荐
3.ToList:将序列转换为 泛型列表 59 4.ToDictionary:将序 列转化为字典 60 LINQ to SQL语句(19)之ADO.NET与LINQ to SQL 60 1.连接 61 2.事务 61 LINQ to SQL语句(20)之存储过程 63 1.标量返回 63 2.单一结 果集 64...