windows C#-查询表达式基础(二)

embedded/2024/11/20 18:10:52/
查询变量

在 LINQ 中,查询变量是存储查询而不是查询结果的任何变量。 更具体地说,查询变量始终是可枚举类型,在 foreach 语句或对其 IEnumerator.MoveNext() 方法的直接调用中循环访问时会生成元素序列。

本文中的示例使用以下数据源和示例数据。

record City(string Name, long Population);
record Country(string Name, double Area, long Population, List<City> Cities);
record Product(string Name, string Category);static readonly City[] cities = [new City("Tokyo", 37_833_000),new City("Delhi", 30_290_000),new City("Shanghai", 27_110_000),new City("São Paulo", 22_043_000),new City("Mumbai", 20_412_000),new City("Beijing", 20_384_000),new City("Cairo", 18_772_000),new City("Dhaka", 17_598_000),new City("Osaka", 19_281_000),new City("New York-Newark", 18_604_000),new City("Karachi", 16_094_000),new City("Chongqing", 15_872_000),new City("Istanbul", 15_029_000),new City("Buenos Aires", 15_024_000),new City("Kolkata", 14_850_000),new City("Lagos", 14_368_000),new City("Kinshasa", 14_342_000),new City("Manila", 13_923_000),new City("Rio de Janeiro", 13_374_000),new City("Tianjin", 13_215_000)
];static readonly Country[] countries = [new Country ("Vatican City", 0.44, 526, [new City("Vatican City", 826)]),new Country ("Monaco", 2.02, 38_000, [new City("Monte Carlo", 38_000)]),new Country ("Nauru", 21, 10_900, [new City("Yaren", 1_100)]),new Country ("Tuvalu", 26, 11_600, [new City("Funafuti", 6_200)]),new Country ("San Marino", 61, 33_900, [new City("San Marino", 4_500)]),new Country ("Liechtenstein", 160, 38_000, [new City("Vaduz", 5_200)]),new Country ("Marshall Islands", 181, 58_000, [new City("Majuro", 28_000)]),new Country ("Saint Kitts & Nevis", 261, 53_000, [new City("Basseterre", 13_000)])
];

下面的代码示例演示一个简单查询表达式,它具有一个数据源、一个筛选子句、一个排序子句并且不转换源元素。 该查询以 select 子句结尾。

// Data source.
int[] scores = [90, 71, 82, 93, 75, 82];// Query Expression.
IEnumerable<int> scoreQuery = //query variablefrom score in scores //requiredwhere score > 80 // optionalorderby score descending // optionalselect score; //must end with select or group// Execute the query to produce the results
foreach (var testScore in scoreQuery)
{Console.WriteLine(testScore);
}// Output: 93 90 82 82

在上面的示例中,scoreQuery 是查询变量,它有时仅仅称为查询。 查询变量不存储在 foreach 循环生成中的任何实际结果数据。 并且当 foreach 语句执行时,查询结果不会通过查询变量 scoreQuery 返回。 而是通过迭代变量 testScore 返回。 scoreQuery 变量可以在另一个 foreach 循环中进行循环访问。 只要既没有修改它,也没有修改数据源,便会生成相同结果。

查询变量可以存储采用查询语法、方法语法或是两者的组合进行表示的查询。 在以下示例中,queryMajorCities 和 queryMajorCities2 都是查询变量:

City[] cities = [new City("Tokyo", 37_833_000),new City("Delhi", 30_290_000),new City("Shanghai", 27_110_000),new City("São Paulo", 22_043_000)
];//Query syntax
IEnumerable<City> queryMajorCities =from city in citieswhere city.Population > 100000select city;// Execute the query to produce the results
foreach (City city in queryMajorCities)
{Console.WriteLine(city);
}// Output:
// City { Population = 120000 }
// City { Population = 112000 }
// City { Population = 150340 }// Method-based syntax
IEnumerable<City> queryMajorCities2 = cities.Where(c => c.Population > 100000);

另一方面,以下两个示例演示不是查询变量的变量(即使各自使用查询进行初始化)。 它们不是查询变量,因为它们存储结果:

var highestScore = (from score in scoresselect score
).Max();// or split the expression
IEnumerable<int> scoreQuery =from score in scoresselect score;var highScore = scoreQuery.Max();
// the following returns the same result
highScore = scores.Max();var largeCitiesList = (from country in countriesfrom city in country.Citieswhere city.Population > 10000select city
).ToList();// or split the expression
IEnumerable<City> largeCitiesQuery =from country in countriesfrom city in country.Citieswhere city.Population > 10000select city;
var largeCitiesList2 = largeCitiesQuery.ToList();
查询变量的显式和隐式类型化

本文档通常提供查询变量的显式类型以便显示查询变量与 select 子句之间的类型关系。 但是,还可以使用 var 关键字指示编译器在编译时推断查询变量(或任何其他局部变量)的类型。 例如,本文前面演示的查询示例也可以使用隐式类型化进行表示:

var queryCities =from city in citieswhere city.Population > 100000select city;

在前面的示例中,var 的使用是可选的。 queryCities 是隐式或显式类型的 IEnumerable<City>。

结束查询表达式

查询表达式必须以 group 子句或 select 子句结尾。

group 子句

使用 group 子句可生成按指定键组织的组的序列。 键可以是任何数据类型。 例如,以下查询会创建包含一个或多个 Country 对象,并且其关键值是数值为国家/地区名称首字母的 char 类型。

var queryCountryGroups =from country in countriesgroup country by country.Name[0];

http://www.ppmy.cn/embedded/139142.html

相关文章

PHP大模型深度学习库TransformersPHP 安装体验

TransformersPHP是一个工具包&#xff0c;PHP开发人员可以轻松地将机器学习魔法添加到他们的项目中。 管方地址&#xff1a;TransformersPHP github地址&#xff1a;GitHub - CodeWithKyrian/transformers-php: Transformers PHP is a toolkit for PHP developers to add machi…

2个word内容合并

要在Java中实现将两个Word文档的内容合并&#xff0c;可以使用Apache POI库来操作Word文档。 下面2个word合并包括以下内容的合并和处理&#xff1a; 1、段落、标题合并以及样式处理 2、表格合并以及样式处理 3、单元个内容样式处理 4、带word模板占位符内容处理 步骤&#xff…

go语言中的切片含义和用法详解

Go 语言中的切片&#xff08;slice&#xff09;是引用类型&#xff0c;它提供了一种灵活的方式去操作一系列具有相同类型的数据。与数组不同&#xff0c;切片的长度不是固定的&#xff0c;可以动态地增长或缩小。切片在 Go 语言中非常常用&#xff0c;因为它们提供了高效且方便…

【读书笔记-《网络是怎样连接的》- 7】Chapter3_2 路由器

本篇继续介绍路由器及其转发过程。 1 路由器内部结构 路由器内部结构图如图所示。 即主要包含左侧的包转发模块和右侧的端口模块。转发模块负责查找包的发送目的地&#xff0c;端口模块完成包的发送。通过安装不同的硬件&#xff0c;转发模块不仅可以支持以太网&#xff0c;也…

无插件H5播放器EasyPlayer.js网页web无插件播放器选择全屏时,视频区域并没有全屏问题的解决方案

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

软考之RESTful 架构的特点

RestFul 架构的特点及其在前后端分离中的实现 一、引言 随着互联网应用的快速发展&#xff0c;系统架构也在不断演变。RESTful&#xff08;Representational State Transfer&#xff09;架构作为一种广泛应用的设计风格&#xff0c;因其简洁、灵活和可扩展性而受到关注。尤其…

SpringBoot 增量部署发布(第2版)

一、背景介绍 书接上一篇《SpringBoot 增量部署发布_springboot增量部署-CSDN博客》&#xff0c;上一篇内容实现了将静态资源与jar分离&#xff0c;但是即使是打包成**-exec.jar&#xff0c;解压jar文件&#xff0c;可以看到里面包含了static&#xff0c;resource目录&#xf…

3-KSQL

查看KSQL帮助 在我们使用命令行来对KES进行操作的时候&#xff0c;我们一般是使用KSQL命令行工具来对KES进行操作 学习一个命令的使用方法&#xff0c;是必然少不了我们去查看它的帮助文档 [kingbasenode1 ~]$ ksql --help ksql是Kingbase 的交互式客户端工具。 使用方法:ks…