C#3.0新增功能09 LINQ 基础01 语言集成查询

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询从来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,须要针对每种类型的数据源了解不一样的查询语言:SQL 数据库、XML 文档、各类 Web 服务等。 借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件同样。 可使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询。 LINQ 系列技术提供了针对对象 (LINQ to Objects)、关系数据库 (LINQ to SQL) 和 XML (LINQ to XML) 的一致查询体验。html

对于编写查询的开发者来讲,LINQ 最明显的“语言集成”部分就是查询表达式。 查询表达式采用声明性查询语法编写而成。 使用查询语法,能够用最少的代码对数据源执行筛选、排序和分组操做。 可以使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。数据库

在 C# 中可为如下对象编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集以及支持 IEnumerable 或泛型 IEnumerable<T> 接口的任何对象集合。 此外,第三方也为许多 Web 服务和其余数据库实现提供了 LINQ 支持。express

下面的示例展现了完整的查询操做。 完整的操做包括建立数据源、定义查询表达式和在 foreach 语句中执行查询。api

class LINQQueryExpressions
{
    static void Main()
    {
        // 指定数据源。
        int[] scores = new int[] { 97, 92, 81, 60 };

        // 定义查询表达式
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // 执行查询
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }            
    }
}
// 输出: 97 92 81

下图为 Visual Studio 中的图例,显示了使用 C# 和 Visual Basic 针对 SQL Server 数据库编写的不完整 LINQ 查询,并具备彻底类型检查和 IntelliSense 支持:框架

显示具备 Intellisense 的 LINQ 查询的图表。

查询表达式概述

  • 查询表达式可用于查询并转换全部启用了 LINQ 的数据源中的数据。 例如,经过一个查询便可检索 SQL 数据库中的数据,并生成 XML 流做为输出。ide

  • 查询表达式易于掌握,由于使用了许多熟悉的 C# 语言构造。性能

  • 查询表达式中的变量全都是强类型,尽管在许多状况下,无需显式提供类型,由于编译器能够推断出。 有关详细信息,请参阅 LINQ 查询操做中的类型关系ui

  • 只有在循环访问查询变量后,才会执行查询(例如,在 foreach 语句中)。 有关详细信息,请参阅 LINQ 查询简介spa

  • 在编译时,查询表达式根据 C# 规范规则转换成标准查询运算符方法调用。 可以使用查询语法表示的任何查询均可以使用方法语法进行表示。 不过,在大多数状况下,查询语法的可读性更高,也更为简洁。 有关详细信息,请参阅 C# 语言规范标准查询运算符概述code

  • 一般,咱们建议在编写 LINQ 查询时尽可能使用查询语法,并在必要时尽量使用方法语法。 这两种不一样的形式在语义或性能上毫无差别。 查询表达式一般比使用方法语法编写的等同表达式更具可读性。

  • 一些查询操做(如 Count 或 Max)没有等效的查询表达式子句,所以必须表示为方法调用。 能够各类方式结合使用方法语法和查询语法。 有关详细信息,请参阅 LINQ 中的查询语法和方法语法

  • 查询表达式可被编译成表达式树或委托,具体视应用查询的类型而定。IEnumerable<T> 查询编译为委托。 IQueryable 和 IQueryable<T> 查询编译为表达式树。 有关详细信息,请参阅表达式树

 

若要详细了解 LINQ,请先自行熟悉查询表达式基础知识中的一些基本概念,而后再阅读感兴趣的 LINQ 技术的相关文档:

若要更深刻地全面了解 LINQ,请参阅 C# 中的 LINQ

若要开始在 C# 中使用 LINQ,请参阅教程使用 LINQ

 

相关文章
相关标签/搜索