LINQ初步

简介: C#中的LINQ入门学习


语言集查询(Language Integrated Query, LINQ)集成了C#编程语言中的查询语法,可以用同样的语法访问不同的数据源。LINQ提供了不同数据源的抽象层,可以使用相同的语法。

.NET Language Integrated Query (LINQ):不采用特定于关系数据库或者XML的专有方案,而采用通用方案解决各种信息源的访问与整合问题。个人感觉这是LINQ最大的特点,除此之外,在LINQ中,查询成为编程语言的一个组成部分,这使得查询表达式可以得到很好地编译时语法检查,丰富的元数据,智能感知等强类型语言的好处。

下面先来看一个实例,对LINQ有一个感性的认识:

namespace ConsoleApplication.Linq
{
   
   
    class FirstLinq
    {
   
   
        public static void Main()
        {
   
   
            String[] names = {
   
    "Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David" };

            Console.WriteLine("使用LINQ进行集合的查询:");
            IEnumerable<String> query = from s in names
                                        where s.Length == 5
                                        orderby s
                                        select s.ToUpper();
            foreach (String str in query)
            {
   
   
                Console.WriteLine(str);
            }

            Console.WriteLine("使用基于方法的查询:");
            //Where、OrderBy、Select方法的参数均为Lambda表达式,即一个匿名函数
            IEnumerable<String> anotherQuery = names
                .Where(s => s.Length == 5)
                .OrderBy(s => s)
                .Select(s => s.ToUpper());
            foreach (String str in anotherQuery)
            {
   
   
                Console.WriteLine(str);
            }
        }
    }
}

运行结果如下:
截屏2023-09-08 18.27.51.png

可以看到查询操作符的实质其实是方法的调用。

查询表达式必须以form子句开头,以select或group子句结束。在这两个子句之间,可以使用where、orderby、join、let和其他from子句。

查询操作符是LINQ中的另外一项重要设施,LINQ使用扩展方法来定义查询操作符,例如Where操作符(Where方法的签名):

public static IEnumerableWhere(this IEnumerable source, Func predicate);

普通的方式来调用扩展方法:

IEnumerable query = Enumerable.Where(names,s => s.Length == 5);

C#允许我们使用如下的方式来调用扩展方法:

IEnumerable query = names.Where(s=> s.Length == 5);

下面解释一下什么是扩展方法:

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。

所有LINQ查询操作都由三个不同的操作组成:

(1)获取数据源。

(2)创建查询。

(3)执行查询。

在上一个示例中,由于数据源是数组,因此它隐式支持泛型IEnumerable接口。这一事实意味着该数据源可以用LINQ进行查询。查询在foreach语句中执行,因此,foreach需要IEnumerable或IEnumerable。支持IEnumerable或派生接口的类型称为可查询类型。可查询类型不需要进行修改或特殊处理就可以用作LINQ数据源。

如果数据源还没有作为可查询类型出现在内存中,则LINQ提供程序必须以可查询类型表示数据源。例如:LINQ to XML将XML文档加载到可查询的XElement类型中;在LINQ to SQL中,首先手动或使用对象关系设计器在设计时创建对象关系映射。针对这些对象编写查询,然后由LINQ to SQL在运行时处理与数据库通信。

具体说来,

LINQ to SQL将SQL的模式信息集成到CLR元数据中,自然地将面向对象领域的对象与关系型数据库中的表格数据相互转化,从而允许我们使用LINQ来便捷地访问关系数据库。

LINQ to SQL是作为ADO.NET的一个重要组件,而非完全替代品。

LINQ to XML 提供使用 .NET 语言集成查询 (LINQ)Framework 的内存中 XML 编程接口。 LINQ to XML 使用最新的 .NET Framework 语言功能,相当于更新的和重新设计的文档对象模型 (DOM) XML 编程接口。

个人感觉LINQ最大的特色就是:LINQ 系列技术提供了针对对象 (LINQ toObjects)、关系数据库 (LINQ to SQL) 和 XML (LINQ to XML) 的一致查询体验。

目录
相关文章
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
221 1
|
网络协议 关系型数据库 MySQL
深入解读网络协议:原理与重要概念
TCP/IP协议 TCP/IP是互联网通信的基础协议。它由两个部分组成:TCP负责数据的可靠传输,确保数据按序到达目标;IP负责寻址和路由,确保数据在网络中正确传递。TCP/IP协议簇涵盖了多个层次,其中最重要的四个层次是:应用层、传输层、网络层和链路层。 应用层: 在应用层,各种应用程序与网络进行交互。这包括诸如HTTP(用于Web浏览器)、SMTP(用于电子邮件)、FTP(用于文件传输)等协议。在这个层次,数据被转换成适当的格式,以便在网络上传输,同时也从网络接收的数据被转换为用户可以理解的形式。 传输层: TCP和UDP是两种网络传输协议。TCP提供可靠连接,确保数据不丢失且按顺序传输,
374 0
剖析C语言中常见的几个字符串库函数
剖析C语言中常见的几个字符串库函数
Why Cloud?
        In data centers today, many computers suffer the same underutilization in computingpower and networking bandwidth.
1321 1
|
1天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
2544 11
|
12天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
6247 57
|
8天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
2696 27
|
29天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
42984 157
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API