前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#进阶-LINQ表达式基础语法Ⅱ

C#进阶-LINQ表达式基础语法Ⅱ

作者头像
Damon小智
发布2024-02-03 10:30:39
1210
发布2024-02-03 10:30:39
举报
文章被收录于专栏:全栈文档库全栈文档库

本篇文章我们将演示LINQ扩展包的基础语法,以Any、All、Single、Skip、Take、Top等函数为例,目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。

?

基础语法

在学习之前,我们要做一些准备工作,我们需要创建User对象和包含User对象的集合,作为后面查询和输出的数据源,参见这篇文章C#进阶之LINQ表达式总结完成准备工作。

数据源:

linq002 1 - C#进阶-LINQ表达式基础语法Ⅱ
linq002 1 - C#进阶-LINQ表达式基础语法Ⅱ

⑥ Any/All 函数

Any()函数判断判断是否至少存在一个符合元素符合条件;All()函数判断是否全部元素都符合条件;下面以Any()函数为例:

代码语言:javascript
复制
/* SQL里的表达: 查找用户里是否存在年龄小于30岁职业是医生的女性 */
select count(*) from user where occupation = "Doctor" and gender = false and age < 30; //返回符合的个数
代码语言:javascript
复制
/* C#版本1 */
bool result = (from u in list where u.age < 30 where !u.gender where u.occupation == "Doctor" select u).Any();
/* C#版本2 */
bool result = list.Any(u => u.age < 30 && !u.gender && u.occupation == "Doctor");

数据源中所有医生如下:

CKT5VEQ3TLIX0X9R - C#进阶-LINQ表达式基础语法Ⅱ
CKT5VEQ3TLIX0X9R - C#进阶-LINQ表达式基础语法Ⅱ

可以看到,目前我们数据源里是有Liu Shuai这一条符合三个属性(小于30岁/医生/女性)的。

代码语言:javascript
复制
true /* 输出结果 */

这里Any()函数是只要存在至少一个符合全部条件的结果,即返回布尔值True,只有在一个都不符合条件的情况下才会返回False;与之相反,All()函数只有在全部数据都符合全部条件的情况下,才会返回True,只要有一条不满足就返回False;All()函数的语法和Any()函数的语法相同,上面的例子把Any()直接替换成All()即可。


⑦ Single/SingleOrDefault 函数

Single()判断是否只有一个元素符合条件,若成立则返回该元素,若不成立则抛出异常。

代码语言:javascript
复制
/* SQL里的表达: 查找用户里年龄小于30岁职业是医生的女性 */
select * from user where occupation = "Doctor" and gender = false and age < 30
代码语言:javascript
复制
/* C#版本1 */
User userResult = (from u in list where u.age < 30 where !u.gender where u.occupation == "Doctor" select u).Single();
/* C#版本2 */
User userResult = list.Single(u => u.age < 30 && !u.gender && u.occupation == "Doctor");
linq006 - C#进阶-LINQ表达式基础语法Ⅱ
linq006 - C#进阶-LINQ表达式基础语法Ⅱ
代码语言:javascript
复制
{id = 6, name = Liu Shuai, age = 29, gender = False, occupation = Doctor} /* 输出结果 */

Single()要求有且只有一条满足要求的数据,多条满足条件或一条也没有,此方法会报错;

SingleOrDefault()要求最多有一条满足要求的数据,多条满足条件,此方法会报错;没有数据则返回数据类型的默认值;

类似的还有First()、FirstOrDefault()、Last()、LastOrDefault(),这里给大家做了一个异常表格记录了各种情况的返回值:

函数

没有满足

一条满足

多条满足

list本身为Null

Single

异常

该元素

异常

异常

SingleOrDefault

默认值

该元素

异常

异常

First

异常

该元素

第一个元素

异常

FirstOrDefault

默认值

该元素

第一个元素

异常

Last

异常

该元素

末尾的元素

异常

LastOrDefault

默认值

该元素

末尾的元素

异常

面对可能出现的异常,我们一般在使用这类方法时要进行Try{…}Catch(…){…}。


⑧ Skip/Take/Top 函数

代码语言:javascript
复制
/* SQL里的表达: 查找用户表自然排序第4个人到第6个人的姓名*/
select name from user limit 3,3;
代码语言:javascript
复制
/* C#版本1 */
List<string> nameList = (from u in list select u.name).Skip(3).Take(3).ToList();
/* C#版本2 */
List<string> nameList = list.Skip(3).Take(3).Select(x => x.name).ToList();
CKT5VEQ3TLIX0X9R - C#进阶-LINQ表达式基础语法Ⅱ
CKT5VEQ3TLIX0X9R - C#进阶-LINQ表达式基础语法Ⅱ
代码语言:javascript
复制
Liu Guangzhi, Liu Ziming, Liu Shuai /* 输出结果 */

同理,Top(n)表示截取前n条数据。

?

Damon_Liu

Damon, Chinese, Liu Guangzhi, Software development engineer, CSDN quality creator, Ali Cloud expert blogger, Microsoft Technology Associate, Good at C#, Java, PHP, Python, etc, Love sports, Workaholic, Communist.

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础语法Ⅱ
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com