(十一)CSharp-LINQ(1)

news/2024/10/30 9:33:03/

一、LINQ

数据库可以通过 SQL 进行访问,但在程序中,数据要被保存在差异很大的类对象或结构中。由于没有通用的查询语言来从数据结构中获取数据。所以可以使用 LINQ 可以很轻松地查询对象集合。

LINQ 高级特性:

  • LINQ 代表语言集成查询。
  • LINQ 是 .NET 框架的扩展,它允许我们以使用 SQL 查询数据库的类似方式来查询数据集合。
  • 使用 LINQ ,你可以从数据库、对象集合以及 XML 文档等中查询数据。
static void Main()
{
int[] numbers = { 2,12,5,15 };//数据源
IEnumerable<int> lowNums = //定义并存储查询form n in numberswhere n <10select n;foreach(var x in lowNums) //执行查询
Console.Write($"{ x },");
}

输出结果:

2,5,

二、LINQ 提供程序

LINQ 还可以查询各种类型的数据源,比如 SQL 数据库、XML 文档等等。
LINQ 提供程序: 对于每一种数据源类型,一定有根据该数据源类型实现 LINQ 查询的代码模块。

请添加图片描述

三、匿名类型

new { FieldProp = InitExpr, FieldProp = InitExpr,... }

示例:

static void Main()
{
var student = new{ Name = "Mary Jones",Age = 19, Major = "History" };
Console.WriteLine($"{ student.Name },Age { student.Age },Major:{ student.Major }");
}//匿名对象初始化语句:Name = "Mary Jones",Age = 19, Major = "History" 

输出结果:

Mary Jones,Age 19,Major:History

关于匿名类型:

  • 匿名类型只能用于局部变量,不能用于类成员
  • 由于匿名类型没有名字,必须使用 var 关键字作为变量类型。
  • 不能设置匿名类型对象的属性。编译器为匿名类型创建的属性是只读的。

上面的例子中,是对象初始化语句的赋值形式。匿名类型的对象初始化语句还有其他两种形式:简单标识符和成员访问表达式。(这两种形式叫作投影初始化语句)

class Other
{
static public string Name = "Mary Jones";
}class Program
{
static void Main()
{
string Major = "History";
var student = new { Age = 9, Other.Name ,Major };Console.WirteLine($"{ stuent.Name },Age { student.Age },Major:{ student.Major }");
}
}

输出结果:

Mary Jones, Age 19, Major : History

转换为赋值形式:

var student = new { Age = 9, Name = Other.Name ,Major = Major };

四、方法语法和查询语法

  • 方法语法使用标准的方法调用。这些方法是一组叫作标准查询运算符的方法。
  • 查询语法看上去和 SQL 语句很相似,使用查询表达式形式书写。
  • 在一个查询中可以组合两种形式。

查询语法是声明式的,也就是说,查询描述的是你想返回的东西,但并没有指明如何执行这个人查询。方法语法是命令式的,它指明了查询方法调用的顺序。C# 编译器会将使用查询语法表示的查询翻译为方法调用的形式。

示例:

    class Program{static void Main(string[] args){int[] numbers = { 2, 5, 28, 31, 17, 16, 42 };//查询语法var numsQuery = from n in numberswhere n < 20select n;//方法语法var numsMethod = numbers.Where(N => N < 20);//两种形式的组合int numsCount = (from n in numberswhere n < 20select n).Count();foreach (var x in numsQuery)Console.Write($"{ x },");Console.WriteLine();foreach (var x in numsMethod)Console.Write($"{ x },");Console.WriteLine();Console.WriteLine(numsCount);Console.ReadKey();}}

输出结果:

2,5,17,16,
2,5,17,16,
4

五、查询变量

LINQ 查询可以返回两种类型的结果——可以是一个枚举,它是满足查询参数的项列表;也可以是一个叫作标量的单一值,它是满足查询条件的结果的某种摘要形式。

int[] numbers = { 2,5,28 };
//返回一个枚举器
IEnumerable<int> lowNums = from n in numberswhere n < 20select nl
//返回一个整数
int numsCount = (from n in numberswhere n <20select n).Count();查询变量:lowNums、numsCount

查询执行实践的差异总结:

  • 如果查询表达式返回枚举,则查询一直到处理枚举时才会执行。
  • 如果枚举被处理多次,查询就会执行多次。
  • 如果在进行遍历之后、查询执行之前数据有改动,则查询会使用新的数据。
  • 如果查询表达式返回标量,查询立即执行,并且把结果保存在查询变量中。

http://www.ppmy.cn/news/520377.html

相关文章

插件 - 插件机制触手可及

文章目录 Pre方案流程图优点缺点Code小结Pre 插件 - 一份配置,离插件机制只有一步之遥 中是不是有依赖, 我不想依赖 ,肿么办? 方案 应用A定义服务接口,约定插件实现的功能规范。应用B,C,D等各自实现该接口,并打包成jar包,放置在应用A约定的读取目录下。应用A在运行时,读取…

MDK AC6开启FPU移植DSP库时报错Error: L6242E: Cannot link object arm_cos_f32.o as its attributes are incompat

报错 我在keil mdk中使用AC6作为编译器&#xff0c;在给f4移植dsp库时报错&#xff0c;照网上教程配置好了&#xff0c;编译后报错 Error: L6242E: Cannot link object arm_common_tables.o as its attributes are incompatible with the image attributes. Error: L6242E: C…

STM32中arm_math.h库中fft的相关使用

①rfft实数傅里叶变换 uint16_t fftSize 2048; //定义rfft的长度uint8_t ifftFlag 0; //表示fft变换为正变换,1则为逆变换arm_rfft_fast_instance_f32 S; //定义rfft的结构体arm_rfft_fast_init_f32 (&S, fftSize); //例化fft结构体&#xff0c;确定fft点…

stm32f4 dsp库arm_cfft_f32 fft用法

void arm_cfft_f32( const arm_cfft_instance_f32 * S, float32_t * p1, uint8_t ifftFlag, uint8_t bitReverseFlag); arm_cfft_instance_f32 * S是一个结构体指针这个结构体包含FFT运算的旋转因子和位反转表&#xff0c;就相当于一个常量&#xff0c;我们不用去管…

无人机姿态解算_扩展卡尔曼滤波(2)

一、扩展卡尔曼滤波 KF和EKF的公式对比&#xff08;基本没差别&#xff09; 二、扩展卡尔曼五个公式 利用扩展卡尔曼滤波估计四元数。 下图是论文中的截图。可以和前面的卡尔曼滤波估计高度文章的那五个公式对应一下。 观测矩阵的确定。 三、代码的实现 1. 四元数模长归…

ARM CMSIS DSP库函数arm_sin_cos_f32的BUG

ARM CMSIS DSP库函数arm_sin_cos_f32的BUG 王强 2016-05-10 本人从事电力电子产品的研发&#xff0c;使用的是STM32F4系列的CPU&#xff0c;带浮点运行&#xff0c;进行park变换或逆变换的时候&#xff0c;需要用到sin和cos&#xff0c;为了方便就采用了arm_sin_cos_f32这个函…

基于ARM 的neon介绍以及常用intrinsic函数总结

在介绍NEON前&#xff0c;必须要介绍一下SIMD。 1.什么是simd 众所周知&#xff0c;计算机程序需要编译成指令才能让 CPU 识别并执行运算。所以&#xff0c;CPU 指令处理数据的能力是衡量 CPU 性能的重要指标。为了提高 CPU 指令处理数据的能力&#xff0c;半导体厂商在 CPU …

【嵌入式】STM32利用arm-dsp库进行FIR滤波

目录 一、Matlab中的FIR实验1.搭建原始信号2.设计FIR滤波器3.FIR滤波4.滤波前后对比 二、嵌入式平台FIR滤波移植1.arm-dsp库移植2.获得FIR滤波系数3.基于arm-dsp的FIR程序4.滤波结果-与Matlab比对 三、总结 电力电子应用中&#xff0c;往往需要对电流、电压信号进行采样&#x…