LINQ 查询表达式(C# 编程指南)
语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上。 借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。
对于编写查询的开发人员来说,LINQ 最明显的“语言集成”部分是查询表达式。 查询表达式是使用 C# 3.0 中引入的声明性查询语法编写的。 通过使用查询语法,您甚至可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。 您使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO.NET 数据集、XML 文档和流以及 .NET 集合中的数据。
下面的示例演示了完整的查询操作。 完整操作包括创建数据源、定义查询表达式,以及在 foreach 语句中执行查询。
class LINQQueryExpressions
{
static void Main()
{ // Specify the data source.
int[] scores = new int[] { 97, 92, 81, 60 }; // Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score; // Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
}
}
// Output: 97 92 81
有关 C# 中的 LINQ 基础知识的更多信息,请参见 Getting Started with LINQ in C#。
查询表达式可用于查询和转换来自任意支持 LINQ 的数据源中的数据。 例如,单个查询可以从 SQL 数据库检索数据,并生成 XML 流作为输出。
查询表达式容易掌握,因为它们使用许多常见的 C# 语言构造。 有关更多信息,请参见 Getting Started with LINQ in C#。
查询表达式中的变量都是强类型的,但许多情况下您不需要显式提供类型,因为编译器可以推断类型。 有关更多信息,请参见Type Relationships in LINQ Query Operations (C#)。
在您循环访问 foreach 语句中的查询变量之前,不会执行查询。 有关更多信息,请参见 Introduction to LINQ Queries (C#)。
在编译时,根据 C# 规范中设置的规则将查询表达式转换为“标准查询运算符”方法调用。 任何可以使用查询语法表示的查询也可以使用方法语法表示。 但是,在大多数情况下,查询语法更易读和简洁。 有关更多信息,请参见 C# 语言规范和Standard Query Operators Overview。
作为编写 LINQ 查询的一项规则,建议尽量使用查询语法,只在必需的情况下才使用方法语法。 这两种不同形式在语义或性能上没有区别。 查询表达式通常比用方法语法编写的等效表达式更易读。
一些查询操作,如 Count<TSource> 或 Max,没有等效的查询表达式子句,因此必须表示为方法调用。 方法语法可以通过多种方式与查询语法组合。 有关更多信息,请参见Query Syntax and Method Syntax in LINQ (C#)。
查询表达式可以编译为表达式树或委托,具体取决于查询所应用到的类型。 IEnumerable<T> 查询编译为委托。 IQueryable 和 IQueryable<T> 查询编译为表达式树。 有关更多信息,请参见表达式树(C# 和 Visual Basic)。
LINQ 查询表达式(C# 编程指南)的更多相关文章
- 2.3 LINQ查询表达式中 使用select子句 指定目标数据
本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...
- Linq专题之创建Linq查询表达式
本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,DataSet对象类型和XML类型的数据源的Linq查询表达式. 下面在实例代码ReadyCollectionData()函数创建了准备的数据 ...
- LINQ查询表达式---------let子句
LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...
- LINQ查询表达式---------join子句
LINQ查询表达式---------join子句 join 子句接受两个源序列作为输入. 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性. join子句使用 ...
- LINQ查询表达式---------orderby子句
LINQ查询表达式---------orderby子句 LINQ可以按元素的一个或多个属性对元素进行排序. class Program { public class PerInfo { public ...
- LINQ查询表达式---------into
LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...
- LINQ查询表达式---------group子句
LINQ查询表达式---------group子句 LINQ表达式必须以from子句开头,以select或group子句结束.使用guoup子句来返回元素分组后的结果.group 子句返回一个 IGr ...
- LINQ查询表达式---------select子句
LINQ查询表达式---------select子句 1.1常见的select子句查询 class Program { public class PerInfo { public int Id { g ...
- LINQ查询表达式---------where子句
LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...
- LINQ查询表达式---------from子句
LINQ查询表达式---------from子句 LINQ的查询由3基本部分组成:获取数据源,创建查询,执行查询. //1.获取数据源 List<, , , , , }; //创建查询 var ...
随机推荐
- vs 只能没有智能提示的解决方法
我vs今天出现一点比较诡异的情况,莫名奇妙就不能自动生成我拖的控件的后端代码了(****.aspx.designer.cs) 我在网上找了下,找到一个解决方法,这里把解决方法贴下来. 网上解决方法的出 ...
- 关于Linux与windows传递文件乱码问题
linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...
- db2+python+sqlchemy环境的搭建
记录了通过sqlalchemy 管理db2数据库的环境搭建 1.db2数据库安装配置 利用winscp复制iso文件到/mnt/IBM_db2 目录下 IBM_db2为自己创建 重命名 mv IBM\ ...
- Linux- Nginx简单的负载均衡(一)
这里先进行简单的nginx负载,安装nginx这里就不多说了,我们情景假设在已经安装好了nginx上: 1)查询nginx中的upstrea负载均衡模块 默认是有安装的.进入nginx源码目录中 . ...
- EMC Documentum DQL整理(三)
1.Get Content Size in folder SELECT SUM(r_full_content_size/1024.0) FROM dm_sysobject WHERE FOLDER(' ...
- 【转】input输入框中光标高度的变化问题
原文地址:http://blog.csdn.net/luochao_tj/article/details/17755457 input[type='text']文本框光标高度在有输入内容和为空时发生很 ...
- 烂泥:Linux系统与windows系统文件同步
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章中,我们介绍了有关Linux系统之间的文件同步,这篇文章我们来介绍下,有关Linux系统与windows系统,以及windows系统与windo ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- DNS 原理入门
导读 DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识.本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作.我的目标是,读完此文后,你就能完全理解DNS. 一 ...
- cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题
最近在解决XSS注入的问题,由于使用的servlet版本是2.5,不支持httpOnly的属性,故做了个工具类来实现cookie的httpOnly的功能.全类如下: /** * cookie工具类,解 ...