.net coer IQueryable类型的执行逻辑(延迟执行),认真看,你会有收获的。

在这里插入图片描述
先看图
IQueryable

在使用EF框架时候,我们都会使用Linq表达来创建sql语句式进行数据查询
使用Linq表达式创建的变量 就是IQueryable变量

在完成IQueryable的创建以后,我们的表达式不会立即执行,所以Linq返回的IQueryable类型并不是查询结果,而是延迟执行的表达式,最后直到我们使用聚合函数操作之后,才会真正执行数据库的操作。

延迟执行的目的:
1.为后续动态表达提供可能,比如下面代码:

 public IEnumerable<TouristRoute> GetTouristRoutes(string keyword)
        {
            //Include  和Jion 都可以进行表连接   IQueryable将会对数据进行延时处理  只会先生成sql语句  并不会执行操作
            IQueryable<TouristRoute> result = _context.TouristRoutes.Include(t => t.TouristRoutePictures);
            
            //判断搜索内容是否为空
            if (!string.IsNullOrEmpty(keyword)) 
            {
                //对字符串进行空字符去除
                keyword = keyword.Trim();
                result = result.Where(t=>t.Title.Contains(keyword));
            }



            return result.ToList();//ToList将会立即执行数据库操作
        }

这个函数表示,关键词搜索,通过keyword进行,有2种情况需要考虑,一种是有关键词的情况,一种是没有,有了IQueryable 我们就可以用一个简单的if语句进行判断,根据不同的情况,加入Where语句。
2.**减少数据库的执行次数。**我们知道,每次执行数据库的操作,其实就是一次IO操作,而系统中的IO操作开销是最大的也是最浪费时间的,而IQueryable设计之初,就是为数据库服务的,
IQueryable在创建的时候是以Experssion Tree也就是表达式 目录树的形式构成的,本质上是棵二叉树,所以我们可以不断的给这棵树添加分支,也就是添加新的表达式,直到最后一步,一次性把所有的sql表达式转换成sql语言,统一进行数据库的一次操作,所以linq语句是执行延迟操作的基础,也是最好的EF工具。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值