.net-----语言集成查询LINQ

news2024/9/23 17:25:47

语言集成查询LINQ

  • 前言
  • 相关语言要素
    • 初始值设定项
    • 匿名类型
    • 相关语言要素
    • Lambda表达式
    • 扩展方法
  • LINQ的概念和基本操作
    • 集成语言查询LINQ
    • LINQ查询操作
  • 标准查询运算符
    • 数据排序
    • 数据筛选
    • 数据投影
    • 数据分组
    • 联接运算
    • 数据分区
    • 限定运算
    • 聚合运算
    • 集合运算
    • 生成运算
    • 元素操作
    • 串联运算
    • 相等运算
    • 数据类型转换
  • LINQ to Objects概述
    • LINQ和字符串

前言

  • 相关语言要素
    初始值设定项、匿名类型、Lambda表达式、扩展方法

  • LINQ的概念和基本操作

  • 标准查询运算符

  • LINQ to Objects概述

相关语言要素

初始值设定项、匿名类型、Lambda表达式、扩展方法

初始值设定项

在这里插入图片描述
在这里插入图片描述

  • 初始值设定项特别适用于LINQ 查询表达式
  • 匿名类型只能使用对象初始值设定项进行初始化

匿名类型

  • 由一组只读属性组成的类类型

  • 隐式类型(var)
    必须在定义时初始化,不能赋值为null

  • 匿名类型声明和使用:

var 匿名类型变量 = new {公共只读属性组};

在这里插入图片描述

相关语言要素

  • 匿名类型并不是无类型

  • 匿名类型只是无需预先显式定义

  • 声明匿名类型变量时,通过初始值选项指定的类型,其类型名由编译器生成

Lambda表达式

  • 是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式目录树类型

  • Lambda运算符: =>(“goes to”)

在这里插入图片描述

  • 常用在基于方法的LINQ查询中,作为诸如where等标准查询运算符方法的参数

扩展方法

  • 扩展方法向现有类型“添加”方法,而无需修改原类型的代码(或创建新的派生类型)并重新编译

*扩展方法定义为单独的命名空间中静态类中的静态方法

  • System.Collections.IEnumerable 和 System.Collections.Generic.IEnumerable类型添加了LINQ标准查询功能,只要通过using System.Linq指令导入其命名空间

  • 使用using指令将包含扩展方法的命名空间显式导入到源代码

LINQ的概念和基本操作

集成语言查询LINQ

  • 不同数据源使用不同的查询语言,大大增加开发复杂度

  • LINQ提供一种一致的数据查询模型,用相同的编码模式来查询和转换各种数据源

  • 定义了一组通用标准查询运算符,可以投影、筛选和遍历内存中的集合或数据库中的表

  • SQL Server 数据库

  • XML 文档

  • ADO.NET 数据集

  • 支持IEnumerable或泛型IEnumerable接口的任意对象集合

  • 其他数据源:Web服务和其他数据库(使用第三方的 LINQ 提供程序
    在这里插入图片描述

LINQ查询操作

  1. 获取数据源

  2. 创建查询

  3. 执行查询
    在这里插入图片描述

 //步骤1. 获取数据源
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

//步骤2. 创建查询:从整数数组中返回所有偶数
//方法1:使用查询方法声明查询变量
var numQuery1 = numbers.Where((num) => (num % 2) == 0);
//方法2:使用查询表达式声明查询变量
var numQuery2 =         //查询变量(用以存储查询)
from num in numbers  //必须以from子句开头:指定数据源和范围变量
where (num % 2) == 0 //筛选子句(可选)
select num;  //必须以select子句(选择对象序列)或group子句(分组)结尾

//步骤3. 执行查询并显示查询结果
Console.Write("numQuery1内容如下:");//方法1(查询表达式)查询结果
foreach (var num in numQuery1) Console.Write("{0,1} ", num);
Console.Write("\nnumQuery2内容如下:"); //方法2(查询方法)查询结果
foreach (var num in numQuery2) Console.Write("{0,1} ", num);

标准查询运算符

数据排序

  • 排序操作按一个或多个属性对序列的元素进行排序
  • 第一个排序条件对元素执行主要排序
  • 第二个排序条件则对主要排序结果再进行排序
string[] words = { "the", "quick", "brown", "fox", "jumps" };
foreach (var w in words) Console.Write("{0} ", w);

var q1 = from w in words orderby w.Length descending, w.Substring(0, 1) descending select w;
foreach (var w in q1) Console.Write("{0} ", w);

var q2 = words.OrderByDescending(w => w.Length).ThenByDescending(w => w.Substring(0, 1));
foreach (var w in q2) Console.Write("{0} ", w); 

数据筛选

筛选操作将结果集限制为只包含那些满足指定条件的元素
OfType, Where(where)

数据投影

对属性执行数学函数)以构建仅包含必须属性的新类型
Select(select), SelectMany
将对象转换为一种新形式的操作,通过映射属性(直接映射、或

数据分组

将数据按共享公共属性进行分组,以便对每个组中的元素进行处理
GroupBy(group…by, group…by…into…)

int[] numbers = { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };
var q1 = from n in numbers group n by n % 2;
var q2 = numbers.GroupBy(n => n % 2);

联接运算

将一个数据源中的对象与另一个数据源中共享某个公共属性的对象关联起来
Join, GroupJoin,…

var q12 = categories.Join(products, c => c.ID, p => p.categoryID, (c, p) => new { CategoryName = c.Name, ProductID = p.ID, ProductName = p.Name });

var q22 = categories.GroupJoin(products, c => c.ID, p =>p.categoryID,(c, ps) => new { CategoryName = c.Name, Nums = ps.Sum(p => p.num) });

数据分区

在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分
Skip, SkipWhile, Take, TakeWhile

限定运算

返回一个 Boolean 值,该值指示序列中是否有一些元素满足条件或是否所有元素都满足条件
All, Any, Contains

聚合运算

从数据集计算单个值
Average, Count, Max, Min, Sum,…

集合运算

针对2个集合进行相应的集合运算
Distinct, Except, Intersect, Union

生成运算

用于创建新的值序列
DefaultIfEmpty, Empty, Range, Repeat

元素操作

从一个序列返回单个特定元素
First, Last, Single, ElementAt,…

串联运算

将一个序列追加到另一个序列
Concat

相等运算

比较两个序列,如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则这两个序列相等
SequenceEqual

数据类型转换

更改输入对象的类型
OfType, ToArray, ToList, …

LINQ to Objects概述

  • 通过LINQ to Objects,可以直接针对实现IEnumerable或IEnumerable接口的集合,执行LINQ查询,而无需使用中间LINQ提供程序或API

  • 获取数据源

  • 创建查询

  • 执行查询

LINQ和字符串

  • LINQ 可用于查询和转换字符串和字符串集合

  • LINQ和文件目录
    LINQ非常适用于文件系统操作查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【新知实验室 基于WEB的实时音视频(TRTC)案例搭建】

文章目录1. 实时音视频(TRTC)1.1 实时音视频(TRTC)概述1.2 实时音视频(TRTC)功能集成1.2.1 含 UI 组件集成方案1.2.2 无 UI 组件集成方案1.3 实时音视频(TRTC)架构2. 使用体验2.1 注册腾讯云2.2 申请实时音视频(TRTC)应用2.3 下载SDK的Demo源码2.4 获取 …

前后端结合解决Excel海量公式计算的性能问题

背景 在数据密集的业务领域,尤其是金融,保险,税务等行业中,经常需要利用Excel模型,来对业务进行分析和处理。例如: 1.金融投资: 根据模型进行估值计算,并对投资风险进行评估&#x…

降本增效这九个月,爱奇艺从“穿越火线”,到“冷静增长”

在互联网行业一致宣称降本、提质、增效的小周期里,爱奇艺已经把这个趋势彻底吃透,展现出成熟的一面。 11月22日美股盘前,爱奇艺发布了2022年第三季度业绩,连续三个季度运营盈利,而且当季净增会员数超千万,…

iwebsec靶场 数据库漏洞通关2-Redis数据库漏洞

iwebsec靶场的redis漏洞为未授权漏洞,如下所示。 一、Redis未授权漏洞原因 那么这个未授权漏洞的原理是什么呢?Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任…

PreScan快速入门到精通第三十九讲基于车道线识别传感器的车道保持辅助算法Demo讲解

车道保持辅助系统介绍: 什么是车道保持辅助系统? 疲劳和分心是无意中偏离车辆行驶车道线的最常见原因。车道保持辅助系统主动帮助驾驶者将其车辆保持在车道内,避免或者降低事故的发生。 车道保持辅助系统使用一个前置的摄像头,一般安装在车内后视镜附近,用来检测车辆前方…

项目风险管理十大黄金法则!高质量项目管理必杀技!

随着新冠疫情的发生,在这个VUCA时代越来越多企业开始重视风险管理。其实项目风险管理的好处是巨大的,如果您以积极的方式处理不确定的项目事件,则可能赚很多钱或提前拿到现金流。结果是您可以最大程度地减少项目威胁的影响并抓住发生的机会。…

野火FPGA强化(1):串口

文章目录第31讲:串口RS232串口数据接收模块:Uart_rx串口数据发送模块:Uart_tx底层模块:rs232第32讲:使用SignalTap II嵌入式逻辑分析仪在线调试第33讲:串口RS485key_filterwater_ledbreath_ledled_ctrluart…

Linux 内存之vmstat

文章目录前言一、vmstat简介1.1 processes1.2 memory1.3 block IO1.4 System1.5 cpu activity二、使用步骤2.1 vmstat -a2.2 vmstat -f2.3 vmstat -m2.4 vmstat -s2.5 vmstat -d/D三、vmstat 数据来源参考资料前言 NAMEvmstat - Report virtual memory statisticsvmstat 报告有…

Gang Scheduling Performance Benefits for Fine-Grain Synchronization

Gang Scheduling Performance Benefits for Fine-Grain Synchronization 题目 什么是 gang secheduling ? 组调度,要么一组全部执行,要么都不执行什么是 fine-grain 同步 ?细粒度同步 CSDN 博客 摘要 gang scheduling, where …

SSM框架的基本整合

整合SSM框架要做哪些事情: SpringMVC: pom web.xml a. 前端调度器servlet b. 编码过滤器filter c. 支持rest的过滤器springmvc.xml a. 扫描controller包 b. 添加 c. 视图解析器 d. 静态资源解析添加控制器类… Spring:web.xml a. 监听器(在启动web容器时…

Qt QHeaderView 添加复选框

有两种方法&#xff1a; 1. 重载paintSection 主要是重载paintSection和mousePressEvent这两个函数 headview.h #ifndef HEADERVIEW_H #define HEADERVIEW_H#include <QObject> #include <QHeaderView> #include <QPainter> #include <QCheckBox> …

后端进阶知识 Buffer pool 图文详解 之 free链表

Buffer pool 图文详解 之 free 链表 前言数据页缓存页描述信息初始化 Buffer poolfree 链表获取空闲页数据页是否缓存可关注专栏 》MySQL 进阶知识 收藏点赞加关注 前言 Buffer pool 是 InnerDB 存储引擎的一个重要组件&#xff0c;MySQL 的所有 CRUD 操作都是围绕 Buffer poo…

MariaDB 数据文件 迁移

1. 需求 原MariaDB采用默认安装&#xff0c;安装在/所在的分区下&#xff0c;现在该服务器的磁盘空间不补足了&#xff0c;现在扩展插入了一块新的磁盘&#xff0c;并且挂载到了/www/目录下&#xff0c;现在需要将原来的数据库数据迁移至该目录下。 2. 查询数据存储目录 首先…

预测足球世界杯比赛

目录 1. 下载数据集 2. 数据预处理 3. 模型训练与选择 4. 预测 1. 下载数据集 下载后数据如下&#xff1a; FIFA World Cup | Kaggle 2. 数据预处理 reprocess_dataset() 方法是数据进行预处理。预处理过的数据如下&#xff1a; save_dataset() 方法是对预处理过的数据&…

LibreOJ_10010

链接 点此跳转 思路 题目描述 有 nnn 个小朋友坐成一圈&#xff0c;每人有 aia_iai​ 颗糖果。 每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 111 。 求使所有人获得均等糖果的最小代价。 分析 设 xix_ixi​ 表示第 iii 个朋友向第 i−1i-1i−1 个小朋友…

爬虫与云服务器云数据库

腾讯云轻量应用服务器TDSQL-MYSQL数据库PYTHON做爬虫 实现目标&#xff1a;轻量应用服务器上运行Python爬虫&#xff0c;把数据写到TDSQL-MYSQL数据库中。 最近双十一&#xff0c;趁着这一波福利&#xff0c;在腾讯云购买了一个轻量应用服务器和TDSQL-MYSQL版的数据库。买来之…

OpenGL学习

1.1&#xff0c;状态机-上下文-对象 GPU渲染流程 OpenGL自身是一个巨大的状态机(State Machine)&#xff1a;一系列的变量描述OpenGL此刻应当如何运行。 状态机&#xff1a;变量&#xff08;描述该如何操作&#xff09;的大集合 OpenGL的状态通常被称为OpenGL上下文(Contex…

异构图注意力网络Heterogeneous Graph Attention Network ( HAN )

文章目录前言一、基础知识1.异构图&#xff08;Heterogeneous Graph&#xff09;2.元路径3.异构图注意力网络二、异构图注意力网络1.结点级别注意力&#xff08;Node-level Attention&#xff09;2.语义级别注意力&#xff08;Semantic-level Attention&#xff09;总结前言 异…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城&#xff1f;这三个功能要会用&#xff01; 1.定期低价秒杀&#xff0c;提高商城流量 除了通过私域流量裂变&#xff0c;低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头&#xff0c;在情人节、38妇女节、中秋国庆、七夕节等日子&…

前端框架 Nuxtjs Vue3 SEO解决方案 SSR

目录 一、Nuxtjs安装 二、路由规则 三、公共布局 四、Vue3中TypeScript的使用 一、Nuxtjs安装 参考&#xff1a;Installation Get Started with Nuxt安装 - NuxtJS | Nuxt.js 中文网Installation Get Started with Nuxt yarn create nuxt-app <项目名> 项目运行…