避免 IEnumerable 以及 IQueryable 陷阱:
IEnumerable示用Linq会先去数据库查询所有记录,然后再条件查询。
IQueryable接口派生自IEnumerable,但表示数据库应该处理的查询。也就是说IQueryable会把查询的条件写入sql语句,而并不是先取出所有数据后再筛选。
IQueryable接口的使用改变了对 LINQ 查询的评估方式,并确保筛选是由数据库服务器而不是由 MVC 应用程序执行的。只检索符合筛选条件的数据库中的数据,并且不会创建任何立即丢弃的对象。

使用IQueryable接口的缺点是容易意外地生成比预期更多的数据库查询。
比如:
var products = repository.Products.Where(p => p.Price > 25);
ViewBag.ProductCount = products.Count();
在上面代码中,where的时候会触发一次查询,筛选出价格大于25的产品,在下面Count()又会触发一次查询,去数据库内统计价格大于25的产品数量。
IQueryable接口每次计算时都会触发一个新的查询,Entity Framework Core 对 LINQ 查询没有足够的洞察力,无法意识到这两个数据操作可以使用单个数据库查询来处理。在这种情况下,可以通过使用ToArray或ToList方法将IQueryable对象转换为常规的IEnumerable来避免额外的查询。
ToArray方法强制对查询进行计算,并生成一个对象集合,这些对象可以在不触发其他查询的情况下进一步处理,这意味着Count方法对已经从数据库检索的数据进行操作,而不是触发新的查询。

Entity Framework Core今日所得:避免 IEnumerable 以及 IQueryable 陷阱的更多相关文章

  1. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 读取关系数据

    Reading related data¶ 9 of 9 people found this helpful The Contoso University sample web application ...

  2. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组

    Sorting, filtering, paging, and grouping 7 of 8 people found this helpful By Tom Dykstra The Contoso ...

  3. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  4. Entity Framework Core 2.0 全局查询过滤器

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunnarpeipman.com/2017/08/ef ...

  5. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  6. Entity Framework Core 2.0 中使用LIKE 操作符

    Entity Framework Core 2.0 中使用LIKE 操作符 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译 ...

  7. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  8. Entity Framework Core系列之DbContext(添加)

    上一篇我们介绍了Entity Framework Core系列之DbContext,对DbContext有了概念上的了解,这篇将介绍DbContext添加数据 通过DbContext添加实体的主要方法 ...

  9. Entity Framework Core遇到的问题汇总

    1.add-migration : 无法将“add-migration”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 使用E ...

随机推荐

  1. MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制

    一.SQL注入攻击 1.什么是SQL注入攻击 一些了解sql语法的用户,可以输入一些关键字 或合法sql,来导致原始的sql逻辑发生变化,从而跳过登录验证 或者 删除数据库 import pymysq ...

  2. Linux文件服务管理之vsftpd

    简介 vsftpd是 "very secure FTP deamon"的缩写,是一个完全免费,开源的ftp服务器软件. 特点 小巧轻快,安全易用,支持虚拟用户.支持带宽限制等功能. ...

  3. 设置linux代理完成apt-get

    最近ubuntu的服务器被公司关闭了外网使用权限,但是安装软件又需要连接外网,那么就只能通过代理来连接了. 先按照下面的这篇帖子来设置windows端的代理. https://blog.csdn.ne ...

  4. Huawei S系列交换机 Easydeploy 特性

    参考 HW S2750, S5700, S6720 V200R008C00 配置指南-基础配置-EasyDeploy配置 原理,DHCP&TFTP部署等 四. HW EasyDeploy HW ...

  5. node 单线程异步非阻塞

    链接:http://www.runoob.com/nodejs/nodejs-callback.html 首先什么是单线程异步非阻塞? 单线程的意思整个程序从头到尾但是运用一个线程,程序是从上往下执行 ...

  6. woocommerce隐藏breadcrumb面包屑导航

    woocommerce已经集成比较完善的组件,当然也包含breadcrumb面包屑导航,但是我们如果调整一下breadcrumb的位置要如何操作呢?首先要先把woocommerce隐藏breadcru ...

  7. Oracle 删除表恢复

    这句是查询Oracle中回收站的数据 select object_name,original_name,partition_name,type,ts_name,createtime,droptime ...

  8. Scrapy笔记10- 动态配置爬虫

    Scrapy笔记10- 动态配置爬虫 有很多时候我们需要从多个网站爬取所需要的数据,比如我们想爬取多个网站的新闻,将其存储到数据库同一个表中.我们是不是要对每个网站都得去定义一个Spider类呢? 其 ...

  9. ArrayList与String[]

    不逼自己一把,你永远不知道什么是绝望. 今天被初学java的朋友问到了String[]跟ArrayList是不是有关系呢? 猜测是名称之间的联想,记此篇解惑. Array英语单词里是数组.阵列的意思, ...

  10. 付哇刷脸支付系统源码V1.03完整安装包.zip

    付哇刷脸支付系统源码是什么? 1.是一款专业的刷脸+聚合支付平台源码系统: 2.支持对接自己的支付宝和微信官方服务商: 3.基于目前流行的WEB2.0的架构(php+mysql),采用自研DOXCX框 ...