LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]

摘要:
但不同之处在于其类型与最新的IEnumerable<要返回列表<包含查询分配的结果;字符串>ayes=名称。其中(s=>//计算queryforeach(ayes中的字符串项)Console.WriteLine(项);
先说点理论
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
1.OfType :
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张     即接受基于IEnumerable
<T> 接口的信息源,也接受那些在 .NET Framework 1.0 中出现的非参数化的 IEnumerable 接口(non-parameterized IEnumerable interface)。OfType 操作符允许用户在标准的 .NET collections 类(classic .NET collections)上应用标准查询操作符,就像下面的程序:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张代码:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张IEnumerable classic 
= new OlderCollectionType();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张IEnumerable
<object> modern = classic.OfType<object>();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张在这个例子中,变量 modern 产生了与变量 classic 一样的顺序的数据列表(same sequence of values),但是不同的是它的类型兼容最新的 IEnumerable
<T> 代码(modern IEnumerable<T> code),包括标准查询操作符。
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张OfType 操作符对新的信息源也是有用的,因为它允许从基于类型的信息源(source based on type)中过滤出数据(filtering values from)。当要制作新的顺序的时候(producing the 
new sequence),OfType 简单的忽略(omits)原有序列的成员(members of the original sequence)就可以了,这是与类型实参(type argument)不相符的。分析下面的程序,目标是将 string 字符串数据从一个有不同种类数据的数组(heterogeneous array)中分解出来:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张代码:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
object[] vals = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张1"Hello"true"World"9.1 };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张IEnumerable
<string> justStrings = vals.OfType<string>();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张当在 
foreach 语句中列举(enumerate)变量 justStrings 中的数据时,将得到两个依次为“Hello”和“World”的 string 字符串序列(a sequence of two strings )。
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
2.ToList,ToArray:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张  对应用程序想缓存查询赋值的结果,ToList 和 ToArray 这两个操作符提供用来强制查询的直接赋值(force the immediate evaluation),以返回一个含有查询赋值的结果的 List
<T> 或者Array 数组。
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张为了解延迟查询赋值是怎么工作的,请考察下面一段简单地查询一个数组的程序:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张代码:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// declare a variable containing some strings
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
string[] names = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张"Allen""Arthur""Bennett" };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// declare a variable that represents a query
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
IEnumerable<string> ayes = names.Where(s => s[0== 'A');
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// evaluate the query
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
foreach (string item in ayes)
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张  Console.WriteLine(item);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// modify the original information source
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
names[0= "Bob";
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// evaluate the query again, this time no "Allen"
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
foreach (string item in ayes)
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张    Console.WriteLine(item);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张查询在每次变量 ayes 迭代结束(iterated over)时赋值。为了显示需要对结果做一份缓存的copy,我们可以简单给这个查询附加上一个 ToList 或 一个 ToArray 操作符,如下所示:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张代码:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// declare a variable containing some strings
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
string[] names = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张"Allen""Arthur""Bennett" };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// declare a variable that represents the result
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// of an immediate query evaluation
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
string[] ayes = names.Where(s => s[0== 'A').ToArray();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// iterate over the cached query results
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
foreach (string item in ayes)
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张    Console.WriteLine(item);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// modifying the original source has no effect on ayes
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
names[0= "Bob";
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
// iterate over result again, which still contains "Allen"
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
foreach (string item in ayes)
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张    Console.WriteLine(item);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToList 和 ToArray 都强制查询的赋值,就像执行一个标准查询操作符(如 First, ElementAt, Sum, Average, All, 等)返回一个单独的值(singleton values)一样。
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToArray:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
public void ToArray() LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
double[] doubles = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张1.72.31.94.12.9 };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var sortedDoubles 
=
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        from d 
in doubles
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        orderby d descending
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        select d;
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var doublesArray 
= sortedDoubles.ToArray();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    Console.WriteLine(
"Every other double from highest to lowest:");
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
for (int d = 0; d < doublesArray.Length; d += 2LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        Console.WriteLine(doublesArray[d]);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第93张    }
 
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第94张}

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToList:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
public void ToList() LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
string[] words = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张"cherry""apple""blueberry" };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var sortedWords 
=
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        from w 
in words
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        orderby w
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        select w;
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var wordList 
= sortedWords.ToList();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    Console.WriteLine(
"The sorted word list:");
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
foreach (var w in wordList) LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        Console.WriteLine(w);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第93张    }

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第94张}

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToDictionary:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
public void ToDictionary() LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    var scoreRecords 
= new [] LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张new LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{Name = "Alice", Score = 50},
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张                                
new LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{Name = "Bob" , Score = 40},
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张                                
new LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{Name = "Cathy", Score = 45}
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第93张                              }
;
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var scoreRecordsDict 
= scoreRecords.ToDictionary(sr => sr.Name);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    Console.WriteLine(
"Bob's score: {0}", scoreRecordsDict["Bob"]);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第94张}

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张OfType:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第14张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第15张
public void OfType() LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
object[] numbers = LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张null1.0"two"34.0f5"six"7.0 };
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    var doubles 
= numbers.OfType<double>();
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张    Console.WriteLine(
"Numbers stored as doubles:");
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第79张LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第80张    
foreach (var d in doubles) LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第16张{
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第82张        Console.WriteLine(d);
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第93张    }

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第94张}

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToArray:Result
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张Every other double from highest to lowest:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张4.1
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张2.3
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张1.7
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToList:Result
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张The sorted word list:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张apple
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张blueberry
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张cherry
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张ToDictionary:Result
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张Bob's score: {Name=Bob, Score=40}
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张OfType:Result
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张Numbers stored as doubles:
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张1
LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]第1张7

免责声明:文章转载自《LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用itext生成pdf的简单例子【1】Laravel5.1 安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

了解一下Mysql的刷脏以及如何合理刷脏

 mysql数据库跑着跑着突然有那么几秒或者十几秒所有的sql都不响应,就好像是所有的表被锁住一样,但是实际上都没有加锁。但会发现数据库卡几秒,磁盘IO很高,在疯狂地读写盘,其实此时mysql正在刷脏页。 什么是脏页?Innodb在更新数据时,只更新了内存的数据页,但并没有更新磁盘。看下图把数据页从磁盘读到内存,然后在内存里把行记录数据页修改,但mysql...

比特币交易(Transaction)的输入与输出

比特币通过“挖矿”机制保证了不能任意造币。通过分布式网络和HashCash机制解决双重支付问题。事实上比特币系统中不存在独立的电子货币,而只存在交易单(账单),货币值是依附于交易单存在的,所以比特币中的电子货币实质上交易的账单记录的变化,确切的说是货币交易(Transactions)的 数字签名链,它的数字签名算法使用的是ECDSA(椭圆曲线数字签名算法...

使用UIImageView展现来自网络的图片

本文转载至 http://www.cnblogs.com/chivas/archive/2012/05/21/2512324.html UIImageView:可以通过UIImage加载图片赋给UIImageView,加载后你可以指定显示的位置和大小。 1、初始化 UIImageView  *imageView = [[UIImageView all...

kestrel Server的源码分析

今天这一篇博客讲的是.net core 自带的kestrel server,当你开发微服务k8s部署在linux环境下,一般默认开启这个高性能服务,如果大家之前看过我的owin katana的博客,会发现.net core 的好多实现在之前.net standard 的版本已经实现过了,当时开发的asp.net 程序与IIS紧紧耦合在一起,后来的微软团队意...

SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决)

前言:   俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,因为SourceTree同时支持Windows和Mac...

Android studio的一些常用快捷键

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E或者Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+...