.Net Framework 4/C# LINQ*

一、什么是 LINQ

        LINQ 是一种在 C# 等编程语言中集成的查询功能,它允许开发者使用编程语言本身的语法进行数据查询,而不是嵌入式的字符串 SQL 语句。LINQ 查询可以应用于对象、XML 和数据库等多种数据源。

二、LINQ 查询的基本构成

        LINQ 查询通常包含以下几个部分:

  1. from 子句:指定查询操作的数据源和范围变量;
  2. select 子句:指定查询结果的形式。
  3. orderby 子句:对结果进行排序;
  4. where 子句:筛选符合特定条件的元素;

        LINQ 查询表达式包含多种子句,例如有:

  1. group by子句:对查询结果进行分组;
  2. Distinct:去除集合中的重复项。
  3. OrderBy/ThenBy:提供复合排序条件;
  4. Max/Min/Average/Sum:执行数学运算;
  5. Count:返回集合中项的数量;
  6. let 子句:引入范围变量存储子表达式结果;
  7. join 子句:连接多个数据源;

 三、LINQ 查询的两种形式

        LINQ 查询有两种不同的语法形式:

  1. 利用 System.Linq.Enumerable 类中定义的扩展方法和 Lambda 表达式进行查询;
  2. 类似于SQL语法,可读性更好。查询语句最终会被转换为查询方法。

         例如有:

查询表达式语法(类似于 SQL)var result = from element in collectionwhere conditionorderby element.Property ascending/descendingselect element;
方法链语法(扩展方法)var result = collection.Where(element => condition).OrderBy(element => element.Property).Select(element => element);

四、LINQ 常见用法示例

(一) 筛选数据(Where)

List<int> numbers = new List<int>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//查询所有偶数
var evenNumbers = from num int numberswhere num%2 == 0select num;//方法链式
var evenNumbers = numbers.Where(num => num%2 == 0);

(二) 投影数据(Select)

List<string> names = new List<string> { "Alice", "Bob", "Charlie" };// 将每个名字转换为大写
var upperNames = from name in namesselect name.ToUpper();// 方法链形式
var upperNamesMethod = names.Select(name => name.ToUpper());// 输出:ALICE, BOB, CHARLIE

(三) 排序数据(OrderBy/OrderByDescending)

List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };// 按升序排序
var sortedNumbers = from num in numbersorderby num ascending  // 可省略 ascendingselect num;// 方法链形式
var sortedNumbersMethod = numbers.OrderBy(num => num);// 输出:1, 2, 3, 5, 8

(四) 分组数据(GroupBy)

List<string> words = new List<string> { "apple", "banana", "avocado", "cherry" };// 按首字母分组
var groups = from word in wordsgroup word by word[0] into gselect new { Key = g.Key, Words = g };// 方法链形式
var groupsMethod = words.GroupBy(word => word[0]).Select(g => new { Key = g.Key, Words = g });// 输出:
// Group 'a': apple, avocado
// Group 'b': banana
// Group 'c': cherry

(五) 连接操作(Join)

List<Person> people = new List<Person>
{new Person { Id = 1, Name = "Alice" },new Person { Id = 2, Name = "Bob" }
};List<Address> addresses = new List<Address>
{new Address { PersonId = 1, City = "New York" },new Address { PersonId = 2, City = "London" }
};// 内连接:关联人员和地址
var joined = from p in peoplejoin a in addresses on p.Id equals a.PersonIdselect new { Name = p.Name, City = a.City };// 方法链形式
var joinedMethod = people.Join(addresses,p => p.Id,a => a.PersonId,(p, a) => new { Name = p.Name, City = a.City }
);// 输出:
// Alice, New York
// Bob, London

五、LINQ 注意事项

(一) 延迟执行

        LINQ 查询通常是延迟执行的,直到你迭代结果(如使用 foreach 或调用 ToList() )才会执行。

(二) 数据源支持

        LINQ 可以用于任何实现 IEnumerable<T> 或 IQueryable<T> 的类型,包括集合、数据库上下文(如 Entity Framework)、XML 文档等。

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

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

相关文章

【docker】容器技术如何改变软件开发与部署格局

在当今数字化时代&#xff0c;软件开发与部署的效率和灵活性至关重要。就像古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”Docker 作为一款强大的容器技术&#xff0c;正如同软件开发领域的一把利器&#xff0c;极大地改变了应用的开发、交付和运行方式。本文将深入…

MySQL的优化部分介绍

1、定期维护表&#xff1a; ANALYZE TABLE t_order_package; OPTIMIZE TABLE t_order_package; -- 每月在低峰期执行 2、数据归档&#xff08;如果create_time较旧&#xff09;&#xff1a; -- 归档旧数据到历史表 INSERT INTO t_order_package_archive SELECT * FROM t_or…

Go基本语法——go语言中的四种变量定义方法

前言 在go语言中&#xff0c;定义一个变量有四种方式&#xff0c;本文单从语法的层面来介绍这几种方式 单变量定义方法 1.var 变量名 类型&#xff0c;不进行初始化 例如&#xff0c;定义一个变量a后为其赋值&#xff0c;并且打印其值&#xff0c;运行结果如下 //1.不进行…

C++ 对 C 的兼容性

C 对 C 语言的兼容性是有限且有条件的&#xff0c;并非完全无缝兼容。这种兼容性主要体现在语法、标准库和运行时特性上&#xff0c;但存在一些关键差异和不兼容点。以下是详细分析&#xff1a; 一、C 对 C 的兼容性表现 1. 语法兼容&#xff1a;大部分 C 代码可直接编译 基…

ES6 核心语法手册

ES6 核心语法手册 一、变量声明 关键字作用域是否可重定义是否可修改特性let块级作用域❌✅替代 var 的首选const块级作用域❌❌声明常量&#xff08;对象属性可修改&#xff09; // 示例 let name "Alice"; name "Bob"; // ✅const PI 3.14; // PI …

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…

gRPC协议

目录 1. gRPC协议介绍及构成 协议分层 协议关键字段 2. 示例&#xff1a;Greeter 服务 步骤1&#xff1a;定义 .proto 文件 步骤2&#xff1a;生成代码 3. Java代码示例 依赖配置&#xff08;Maven pom.xml&#xff09; 服务端实现 客户端实现 运行流程 关键机制 …

深度学习 w b

在深度学习中&#xff0c;权重 w 和 偏置 b 是神经网络的核心参数&#xff0c;它们的形态&#xff08;shape&#xff09;取决于网络结构和数据维度。以下是关于 w 和 b 的详细解析&#xff1a; 1. 数学表示与物理意义 权重 w&#xff1a; 连接神经元之间的强度&#xff0c;决定…

el-table 树形数据,子行数据可以异步加载

1、 <el-tableborder:header-cell-style"tableStyle?.headerCellStyle"ref"tableRef":data"tableData"row-key"id":default-expand-all"false" // 默认不展开所有树形节点:tree-props"{ children: children, hasC…

Vue中渲染函数的使用

Vue中渲染函数的使用 1. render函数2. h()的使用3. render函数和h函数的区分 vue中的渲染函数&#xff1a; 1.template2.render函数3.jsx -> js extension(jsx也是编译成render函数&#xff0c;可编程能力更强) 1. render函数 1.1. 认识h函数 1.1.1. Vue推荐在绝大多数情况…

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

每日Prompt:治愈动漫插画

提示词 现代都市治愈动漫插画风格&#xff0c;现代女子&#xff0c;漂亮&#xff0c;长直发&#xff0c;20岁&#xff0c;豆沙唇&#xff0c;白皙&#xff0c;气质&#xff0c;清纯现代都市背景下&#xff0c;夕阳西下&#xff0c;一位穿着白色露脐短袖&#xff0c;粉色工装裤…

2025年牛客网秋招/社招高质量 Java 面试八股文整理

Java 面试 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。关键在于理解企业的需求&#xff0c;明确自己的定位&#xff0c;以及掌握一定的应试技巧。 笔试部分&#xff0c;通常是对基础知识、…

在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新

​原因​&#xff1a;未重新编译UI文件​​ Qt的UI文件&#xff08;.ui&#xff09;需要通过​​uic工具&#xff08;Qt的UI编译器&#xff09;​​生成对应的ui_*.h头文件。如果你在Qt Designer中修改了对象名&#xff0c;但没有​​重新构建&#xff08;Rebuild&#xff09;…

前端获取接口数据流程

一、Free-Table组件分析 <free-table v-show"showTable" v-model:page"params.pageNum" 双向绑定当前页大小&#xff0c;支持动态更新 v-model:limit"params.pageSize" 双向绑定每页大小&#xff0c;支持动态更新 v-loading&…

Linux系统防火墙之iptables

防火墙在一个系统中就好像是一个国家的军队&#xff0c;所谓国无军不安&#xff0c;在系统中也是这样&#xff0c;防火墙可以保护系统被别人攻击&#xff0c;过滤垃圾流量等&#xff0c;那么今天我们就来了解一下Linux系统中的一种防火墙iptables。 目录 iptables概述 规则 …

vue项目使用svg图标

下面是在 Vue 3 项目中完整引入和使用 vite-plugin-svg-icons 的步骤 1、安装插件 npm install vite-plugin-svg-icons -D # 或 yarn add vite-plugin-svg-icons -D # 或 pnpm add vite-plugin-svg-icons -D 2、配置 Vite 在 vite.config.ts 或 vite.config.js 中配置&…

元器件基础学习笔记——结型场效应晶体管 (JFET)

场效应晶体管&#xff08;Field Effect Transistor&#xff0c;FET&#xff09;简称场效应管&#xff0c;是一种三端子半导体器件&#xff0c;它根据施加到其其中一个端子的电场来控制电流的流动。与双极结型晶体管 &#xff08;BJT&#xff09; 不同&#xff0c;场效应晶体管 …

拆解实战案例:电商ERP管理系统从需求到原型全流程设计

ERP即企业资源计划系统&#xff0c;全称为Enterprise Resource Planning&#xff0c;其核心在于运用系统化管理思想&#xff0c;为企业员工及管理层构建一个提供决策支持的管理系统平台。它汇聚贯通企业各个业务模块产生的数据流&#xff0c;实现资源配置与业务流程高效协同。尤…

【面试题】如何保证MQ的消息不丢失、不重复

文章目录 一、消息丢失问题的解决方案&#xff08;一&#xff09;发送端丢失&#xff08;二&#xff09;存储端丢失1. 同步刷盘2. Broker 集群 &#xff08;三&#xff09;消费端丢失 二、消息重复问题的解决方案&#xff08;一&#xff09;唯一键约束&#xff08;二&#xff0…