前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#3.0新增功能09 LINQ 基础01 语言集成查询

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

作者头像
张传宁IT讲堂
发布2019-09-17 17:47:18
1.8K0
发布2019-09-17 17:47:18
举报

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

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

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

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

代码语言:javascript
复制
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 查询的图表。
显示具有 Intellisense 的 LINQ 查询的图表。

查询表达式概述

  • 查询表达式可用于查询并转换所有启用了 LINQ 的数据源中的数据。 例如,通过一个查询即可检索 SQL 数据库中的数据,并生成 XML 流作为输出。
  • 查询表达式易于掌握,因为使用了许多熟悉的 C# 语言构造。
  • 查询表达式中的变量全都是强类型,尽管在许多情况下,无需显式提供类型,因为编译器可以推断出。 有关详细信息,请参阅 LINQ 查询操作中的类型关系
  • 只有在循环访问查询变量后,才会执行查询(例如,在 foreach 语句中)。 有关详细信息,请参阅 LINQ 查询简介
  • 在编译时,查询表达式根据 C# 规范规则转换成标准查询运算符方法调用。 可使用查询语法表示的任何查询都可以使用方法语法进行表示。 不过,在大多数情况下,查询语法的可读性更高,也更为简洁。 有关详细信息,请参阅 C# 语言规范标准查询运算符概述
  • 通常,我们建议在编写 LINQ 查询时尽量使用查询语法,并在必要时尽可能使用方法语法。 这两种不同的形式在语义或性能上毫无差异。 查询表达式通常比使用方法语法编写的等同表达式更具可读性。
  • 一些查询操作(如 CountMax)没有等效的查询表达式子句,因此必须表示为方法调用。 可以各种方式结合使用方法语法和查询语法。 有关详细信息,请参阅 LINQ 中的查询语法和方法语法
  • 查询表达式可被编译成表达式树或委托,具体视应用查询的类型而定。IEnumerable<T> 查询编译为委托。 IQueryableIQueryable<T> 查询编译为表达式树。 有关详细信息,请参阅表达式树

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查询表达式概述
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档