语言集成查询 (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

  • 在您循环访问 foreach 语句中的查询变量之前,不会执行查询。  有关更多信息,请参见 Introduction to LINQ Queries (C#)

  • 在编译时,根据 C# 规范中设置的规则将查询表达式转换为“标准查询运算符”方法调用。  任何可以使用查询语法表示的查询也可以使用方法语法表示。  但是,在大多数情况下,查询语法更易读和简洁。  有关更多信息,请参见 C# 语言规范Standard Query Operators Overview

  • 作为编写 LINQ 查询的一项规则,建议尽量使用查询语法,只在必需的情况下才使用方法语法。  这两种不同形式在语义或性能上没有区别。  查询表达式通常比用方法语法编写的等效表达式更易读。

  • 一些查询操作,如 Count<TSource>Max,没有等效的查询表达式子句,因此必须表示为方法调用。  方法语法可以通过多种方式与查询语法组合。  有关更多信息,请参见Query Syntax and Method Syntax in LINQ

  • 查询表达式可以编译为表达式树或委托,具体取决于查询所应用到的类型。  IEnumerable<T> 查询编译为委托。  IQueryableIQueryable<T> 查询编译为表达式树。  有关更多信息,请参见表达式树

下表列出了一些主题,提供有关常规任务的查询和代码示例的其他信息。

主题说明
查询表达式基础介绍基本查询概念并提供 C# 查询语法的示例。
如何:在 C# 中编写 LINQ 查询提供若干基本查询表达式类型的示例。
如何:在查询表达式中处理异常如何以及何时将可能会引发异常的代码移出查询表达式。
How to: Populate Object Collections from Multiple Sources (LINQ)如何使用 select 语句将来自不同源的数据合并为新类型。
如何:对查询结果进行分组演示使用 group 子句的不同方法。
如何:创建嵌套组演示如何创建嵌套组。
如何:对分组操作执行子查询演示如何使用查询中的子表达式作为新查询的数据源。
如何:按连续键对结果进行分组演示如何实现线程安全的标准查询运算符,该运算符可对流式数据源执行分组操作。
如何:在运行时动态指定谓词筛选器演示如何为 where 子句的相等比较提供任意数目的值。
如何:在内存中存储查询结果阐释如何具体化和存储查询结果,而不必使用 foreach 循环。
如何:从方法中返回查询演示如何从方法返回查询变量,以及如何将它们作为输入参数传递给方法。
如何:执行自定义联接操作演示如何基于任何类型的谓词函数执行联接运算。
如何:使用复合键进行联接演示如何基于多个匹配键联接两个源。
如何:对 Join 子句的结果进行排序演示如何对联接运算生成的序列进行排序。
如何:执行内部联接演示如何在 LINQ 中执行内联。
如何:执行分组联接演示如何在 LINQ 中生成已分组的联接。
如何:执行左外部联接演示如何在 LINQ 中生成左外部联接。
如何:在查询表达式中处理 Null 值演示如何在 LINQ 查询中处理 null 值。

备注:转自https://msdn.microsoft.com/zh-cn/library/bb397676.aspx

********************************************************

LINQ (Language-Integrated Query)                

 

若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档

语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能。  LINQ 引入了标准易学的数据查询和更新模式,可以扩展该方法来支持任何类型的数据存储。  Visual Studio 包括 LINQ 提供程序集,后者支持将 LINQ 与 .NET Framework 集合SQL Server 数据库、ADO.NET 数据集和 XML 文档结合使用

MSDN 代码库包括 LINQ 示例。为方便起见,此处提供了指向示例的几个快速链接:

本节内容

Introduction to LINQ
简要介绍可编写的各种应用程序,以及使用 LINQ 查询可以解决的各种问题。

Getting Started with LINQ in C#
描述为理解 C# 文档和示例所应了解的基本情况。

Getting Started with LINQ in Visual Basic
描述为理解 Visual Basic 文档和示例所应了解的基本情况。

How to: Create a LINQ Project
介绍生成 LINQ 项目所需的 .NET Framework 版本、引用和命名空间。

Visual Studio IDE and Tools Support for LINQ
描述Object Relational Designer、对查询的调试器支持以及其他与 LINQ 相关的 IDE 功能。

Standard Query Operators Overview
提供标准查询运算符简介,  还提供包含有关各种类型的查询操作的更多信息的主题链接。

LINQ to Objects
包含指向相关主题的链接,这些主题说明如何使用 LINQ to Objects 来访问内存中的数据结构。

LINQ to XML
包含指向说明如何使用 LINQ to XML 的主题的链接,此功能可提供文档对象模型 (DOM) 的内存中文档修改功能,并且支持 LINQ 查询表达式。

LINQ to ADO.NET
提供 LINQ to DataSet、LINQ to SQL 和 LINQ to Entities 相关文档的入口点。  LINQ to DataSet 使您可以通过使用为其他数据源提供的相同查询功能,在 DataSet 中加入更丰富的查询功能。  LINQ to SQL 为将关系数据作为对象进行管理提供了运行时基础结构。  通过 LINQ to Entities,开发人员可以使用 Visual Basic 或 Visual C# 针对实体框架概念模型编写查询。

Enabling a Data Source for LINQ Querying
介绍自定义 LINQ 提供程序、LINQ 表达式树和其他扩展 LINQ 的方法。

Supplementary LINQ Resources
指向 LINQ 相关信息的其他联机资源的链接。

相关章节

LINQ to SQL
介绍 LINQ to SQL 技术并提供指向可帮助您使用 LINQ to SQL 的主题的链接。

LINQ to ADO.NET
介绍 LINQ to DataSet 技术并提供指向可帮助您使用 LINQ to DataSet 的主题的链接。

LINQ 示例
提供指向相关示例的链接,这些示例用于说明 LINQ 的方方面面。



备注:转自https://msdn.microsoft.com/zh-cn/library/bb397926.aspx