2.2 LINQ中使用from子句指定数据源
数据源是LINQ查询中必不可少的元素,数据源是实现泛型接口IEnumerable<T>或IQueryable<T>的类对象。
可以将IEnumerable<T>简单理解成一个包含多个元素的列表(或数据库中的表),可以用foreach遍历它所有的元素,从而轻松地完成查询操作。
由于是泛型接口,所以通过为数据源指定不同的元素类型,可以表示任何数据集合。
在.NET类库中,列表类、集合类、数组等都实现了接口IEnumerable<T>,所以可以直接将这些数据对象作为数据源在LINQ查询中使用。
每个LINQ查询都以from子句开始,from子句包括以下两个功能:
- 指定查询将采用的数据源
- 定义一个本地变量,表示数据源中的单个元素
单个from子句的编写格式如下,其中,dataSource表示数据源,localVal表示单个元素:
from localVal select dataSource
一般情况下,不用为from子句的localVal元素指定数据类型,编译器会根据数据源的类型为它分配合适的类型,通常元素类型为IEnumerable<T>中的类型T。
例如,当数据源为IEnumerable<int>时,编译器为localVal指定类型为int。当数据远为IEnumerable<string>时,编译器为localVal指定类型为string。
如下列代码所示,由于nums是int[]类型,默认实现了接口IEnumerable<int>,所以numItem的类型为int:
,,,,,,,}; // 定义int数组nums为数据源 var queryResult = (from numItem in nums select numItem); // LINQ查询数据源nums中所有元素
一些特殊情况下,开发人员还需要为本地变量指定数据类型,比如上面的代码,希望将nums中的元素作为object类型进行处理,而不是作为int。这就需要在form子句中为numItem指定目标类型。
如下列代码所示,指定numItem为object类型,由于nums中的元素为int类型,属于object类型的子类型,所以可以直接转换为object类型:
,,,,,,,}; // 定义int数组nums为数据源 var queryResult = (from object numItem in nums select numItem); // LINQ查询数据源nums中所有元素,指定元素类型为object
值得一提的是,编译器并不会检查本地变量(numItem元素)的具体类型,所以当指定类型不正确时,编译时并不会报错。
如下面的代码,本地参数numItem指定为Student类型,但是numItem实际是int类型,所以将numItem指定为Student类型是错误的,编译器并不会报错。
但是当下面的foreach语句使用该查询时,会在运行时进行类型检查,从而产生异常。
class Program { static void Main(string[] args) { , , , , , , , }; // 定义int数组nums为数据源 var queryResult = (from Student numItem in nums select numItem); // LINQ查询数据源nums中所有元素,元素类型指定为Student // 遍历并打印查询结果 foreach (var item in queryResult) { Console.Write(item.ToString()); } } } class Student { }
当Debug上面代码的时候,产生的异常提示如下图,即不能将一个int类型的变量强制转换成Student类型:
建议:如果没有特别需要,笔者建议使用不指定类型的本地变量,让编译器自动根据数据源判断具体的元素类型。
内容参考:
《精通C#5.0与.NET 4.5高级编程——LINQ、WCF、WPF和WF》
【来自 孤影'Blog:http://www.cnblogs.com/LonelyShadow,码字不容易,转载请注明出处。】
2.2 LINQ中使用from子句指定数据源的更多相关文章
- 2.4 LINQ中使用where子句指定筛选条件
本篇讲解的内容有: 使用where筛选过滤LINQ查询 带逻辑的where筛选 多个where筛选子句 [1.使用where筛选过滤LINQ查询] 通常一个LINQ查询不会如前面的示例代码这么简单,经 ...
- 2.3 LINQ查询表达式中 使用select子句 指定目标数据
本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...
- Linq 中查询一个表中指定的字段
//Linq中查询一个表中指定的几个字段: ); // FindAllItems()为查询对应表的所有数据的方法: // Where 里面为查询条件 // Select 为查询的筛选条件 new{} ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- LINQ中的一些查询语句格式
LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...
- C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
- LINQ查询表达式---------join子句
LINQ查询表达式---------join子句 join 子句接受两个源序列作为输入. 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性. join子句使用 ...
- LINQ查询表达式---------where子句
LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...
- Linq中demo,用力看看吧
本文导读:LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能.Linq中where查询与SQL命令中的Where作用相似,都是起到范围限定 ...
随机推荐
- UVA10375 Choose and divide 质因数分解
质因数分解: Choose and divide Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %l ...
- T-SQL性能调整——信息收集
原文:T-SQL性能调整--信息收集 IO信息(自服务器启动开始) --Database IO analysis WITH IOFORDATABASE AS ( SELECT DB_NAME(VFS. ...
- 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)
之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在 ...
- 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)
解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...
- 使用Eclipse+Maven+Jetty构建Java Web开发环境(几个教程综合集成2014发行)
工作需要使用Jetty由于web集装箱,得知Eclipse+Maven+Jetty该组合是非常好的,因此,要在网上找了很多教程,但不写或多或少特定的或过时的内容而导致最终的配置失败,易于配置为未来的同 ...
- MyEclipse下一个XFire发展Webservice示例
最近的研究JAVA发展Webservice.网络发现几个热门选择AXIS.XFire.CFX(XFire下一代),打开前几天对这篇文章比较三种选择,他们已经有了一些概念. 样本,以确定自己的实践 在開 ...
- java_软件发布版本_Asynch HttpClien 对比发行版本说明_Alpha、Beta、RC、GA版本的区别
今天看了一天的apache 的httpasyncclient ,为了和默认的httpclient做个对比,httpcore是核心轻量级的提供传统阻塞IO 和 java NIO两种方式,httpclie ...
- Tomcat剖析(四):Tomcat默认连接器(1)
Tomcat剖析(四):Tomcat默认连接器(1) 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三): ...
- CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...
- Openstack & Hadoop结合项目Sahara
Openstack 项目Sahara,主要是用来搭建Hadoop集群,利用虚拟出来的计算资源,高速搭建Hadoop集群. Sahara项目与OPenstack其它项目的关系: 图片转自:http:// ...