ASP.NET Core 6.0学习笔记(B站杨中科版)(四)—LINQ筛选与查询

一、 IEnumerable/IQueryable Where(Lambda expression)方法

1.Where的基础用法:使用Where可以对IEnumerable、IQueryable类型的数据进行查询并返回满足条件的数据:
在这里插入图片描述

2.Where方法除了上述接收一个参数以外,还能够接收第二个参数index,即当前遍历数据的索引:
(来自《C#高级编程》(第7版):筛选出LastName以A开头,且排名位于偶数位的赛车手)
在这里插入图片描述

二、获取一条数据

1.LINQ中获取一条数据有以下四个方法:
Single:有且只有一条满足要求的数据(要求结果集中只能有一条数据)
SingleOrDefault:最多只有一条满足要求的数据(若没有任何满足要求的数据,则各个数据项的返回值均是该数据类型的默认值,例如int型则返回0,对于引用类型,如对象,返回null)
First:至少有一条,返回第一条数据(没有则报错)
FirstOrDefault:返回第一条数据或默认值
在这里插入图片描述

2.Single():只返回一条数据,例如集合中只有一个元素,若有多个元素,则报错:
在这里插入图片描述

(报错信息:序列中含有多于一条数据)
从集合中筛选出只含一个元素的集合(Name==”张三”)后再调用Single()方法:
在这里插入图片描述

运行结果:
在这里插入图片描述

也可以将两条语句合为一句:
var employee1 = list.Where(e => e.Name == “张三”).Single();
Single()方法中也可以传入Lambda表达式,即Single(Lambda expression)因此,上面的代码可以进一步简化:
var employee1 = list.Single(e=>e.Name==“张三”);
3.SingleOrDefault([Lambda expression]):最多只有一条满足要求的数据(若没有任何满足要求的数据,则各个数据项的返回值均是该数据类型的默认值,例如int型则返回0,对于引用类型,如对象,返回null)
示例代码
在这里插入图片描述

运行结果:
在这里插入图片描述

即,返回对象的默认值null
注意,要是有多条符合条件的数据,则报错:在这里插入图片描述4.First([Lambda Expression]):返回数据集中的第一条数据,也可以在参数中传入查询条件:
在这里插入图片描述

若数据集中没有匹配数据,则报错
5.FirstOrDefault:返回第一条或默认值,比如没有匹配数据,则返回null。

三、使用LINQ表达式构建组合查询

1.类似于SQL,通过LINQ表达式构建组合查询的思路类似于直接使用Sql,首先构建全真查询表达式(where true),然后根据传入条件,逐个进行非空判定,或者直接转换为IQueryable。若不为空则将条件补充到表达式当中。如下图所示:
在这里插入图片描述

在下面的自定义WhereIf()方法中对上面的代码进行了进一步的优化

四、封装自定义WhereIf()方法

1.方法声明:IQueryable WhereIf(this IQueryable source,bool condition,Expression<Func<TSource, bool>> predicate)
2.参数:
(1)this IQueryable source:扩展方法所在类型
(2)bool condition:执行条件,若为真执行后面的predicate表达式,反之不执行
(3)Expression<Func<TSource, bool>> predicate:Lambda表达式,封装查询条件
3.封装代码:
在这里插入图片描述

4.方法调用
在这里插入图片描述

五、OfType方法

1.使用OfType方法可以筛选出序列中指定类型的数据。
在这里插入图片描述
运行:
在这里插入图片描述

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISer_Qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值