关于linq Where中的”或者“运算只查询出来满足一种条件的数据的问题,本质是IEnumerable和IQuerable之间的区别
如下代码所示,其中的"query"返回值类型为IQuerable
var query = _deviceRepository.GetAll().AsNoTracking()
.Where(a=>a.status = 1);
if(ture){
query = query.Where(a=>(a.name == "a" && a.sex = 1 ) || a.name == "b" );
}
var data = query.ToList();
此时,在Where中进行"或者"运算,"||" 左右两边只查询出来了一种条件的数据。
而如下代码所示,在拼接新的Where条件时,进行了ToList(),这个时候query的返回值类型为IEnumerable
var query = _deviceRepository.GetAll().AsNoTracking()
.Where(a=>a.status = 1).ToList();
if(ture){
query = query.Where(a=>(a.name == "a" && a.sex = 1 ) || a.name == "b" ).ToList();
}
var data = query;
此时,query拼接的Where将满足 "||" 两边的条件的数据都查询了出来。
关于IQuerable和IEnumerable之间的区别如下:
在使用IQueryable和IEnumerable的Where方法进行“或者”运算时,存在一些区别。
延迟执行:
IQueryable使用延迟执行,而IEnumerable则立即执行。延迟执行意味着IQueryable中的查询不会立即执行,直到实际需要结果时才会执行。这对于数据库查询非常有用,因为可以构建一个包含多个筛选条件的查询,然后将其发送到数据库执行。而IEnumerable会立即执行查询,因此它无法将查询传递给数据库进行优化处理。数据库查询优化:
IQueryable能够利用提供程序(例如Entity Framework)的功能,将Where条件转换为底层数据库的查询语句。这样可以在数据库层面进行优化,仅返回满足条件的结果。而IEnumerable只是在内存中对集合进行迭代,它不会将查询转换为数据库查询语句。过滤的位置:使用
IQueryable进行“或者”运算时,筛选条件会应用于数据库查询,因此数据库只返回满足条件的结果。而在IEnumerable中使用Where进行“或者”运算时,所有数据都将加载到内存中,然后再进行筛选。这可能会导致性能问题,尤其是当处理大量数据时。
综上所述,使用IQueryable进行“或者”运算更适合于数据库查询,它可以利用数据库的优化和延迟执行的特性。而IEnumerable适用于在内存中对集合进行简单的筛选操作,不涉及数据库查询优化。
关于linq Where中的”或者“运算只查询出来满足一种条件的数据的问题,本质是IEnumerable和IQuerable之间的区别的更多相关文章
- iOS中NSNotification、delegate、KVO三者之间的区别与联系?
前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在网上看到一个博客上详细 ...
- 妥协与取舍,解构C#中的小数运算
题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激! ...
- 【微信小程序】 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded
摘要: 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded 场景:最近做一个车贷计算器, 其中存在一个公式如下: /**** 总金额 * 月利率 * ( ...
- Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构
一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...
- 深入研究js中的位运算及用法
什么是位运算? 位运算是在数字底层(即表示数字的 32 个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序 ...
- 聊聊 C 语言中的 sizeof 运算
聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- PHP中的位运算与位移运算(其它语言通用)
/* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...
- 【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。
第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎 ...
随机推荐
- [CTF]Caser-Pass-Tool1-C++工具
刷pico遇到一个凯撒密码加密题,顺手写了个解密工具,但是暂时没有解决到边界字母的升降档问题 #include<iostream> using namespace std; int mai ...
- .NET周报 【4月第1期 2023-04-02】
国内文章 探索 SK 示例 -- GitHub 存储库中的机器人 https://www.cnblogs.com/shanyou/p/17280627.html 微软 3月22日 一篇文章" ...
- python之爬虫三
20xpath入门 在编写爬虫程序的过程中提取信息是非常重要的环节,但是有时使用正则表达式无法匹配到想要的信息,或者书写起来非常麻烦,此时就需要用另外一种数据解析方法,也就是本节要介绍的 Xpath ...
- win32api中文在线文档
中文文档http://www.yfvb.com/help/win32sdk/ 英文手册https://www.jb51.net/books/724576.html
- [GIT]辨析/区别: git add -u | git add -A | git add . [转载]
参考文献 git add -u与-A .三者的区别 - CSDN
- 【谷粒商城】(一)docker搭建以及项目的创建
网络地址转换-端口转发 VmWare网络配置可以参考这篇:VMWare虚拟机网络连接设置_santirenpc的博客-CSDN博客_vmware 上网设置,真的是被折磨到了.. Docker 虚拟化容 ...
- 彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++
彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server's prerequisites for glibc and libstd ...
- javasec(一)java反射
这篇文章介绍javasec基础知识--java反射. 0x01 反射是什么? 反射是一种机制,利用反射机制动态的实例化对象.读写属性.调用方法.构造函数. 在程序运行状态中,对于任意一个类或对象,都能 ...
- [OpenCV-Python] 9 图像的基础操作
文章目录 OpenCV-Python: 核心操作 9 图像的基础操作 9.1 获取并修改像素值 9.2 获取图像属性 9.3 图像 ROI 9.4 拆分及合并图像通道 9.5 为图像扩边(填充) Op ...
- 【必知必会的MySQL知识】②使用MySQL
目录 前言 启动MySQL服务 连接MySQL MySQL数据库基本命令 小结 前言 根据上一篇文章[必知必会的MySQL知识]①初探MySQL的内容,想必您对MySQL数据库有了一个整体的了解了,并 ...