如下代码所示,其中的"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之间的区别如下:

在使用IQueryableIEnumerableWhere方法进行“或者”运算时,存在一些区别。

  1. 延迟执行:IQueryable使用延迟执行,而IEnumerable则立即执行。延迟执行意味着IQueryable中的查询不会立即执行,直到实际需要结果时才会执行。这对于数据库查询非常有用,因为可以构建一个包含多个筛选条件的查询,然后将其发送到数据库执行。而IEnumerable会立即执行查询,因此它无法将查询传递给数据库进行优化处理。

  2. 数据库查询优化:IQueryable能够利用提供程序(例如Entity Framework)的功能,将Where条件转换为底层数据库的查询语句。这样可以在数据库层面进行优化,仅返回满足条件的结果。而IEnumerable只是在内存中对集合进行迭代,它不会将查询转换为数据库查询语句。

  3. 过滤的位置:使用IQueryable进行“或者”运算时,筛选条件会应用于数据库查询,因此数据库只返回满足条件的结果。而在IEnumerable中使用Where进行“或者”运算时,所有数据都将加载到内存中,然后再进行筛选。这可能会导致性能问题,尤其是当处理大量数据时。

综上所述,使用IQueryable进行“或者”运算更适合于数据库查询,它可以利用数据库的优化和延迟执行的特性。而IEnumerable适用于在内存中对集合进行简单的筛选操作,不涉及数据库查询优化。

关于linq Where中的”或者“运算只查询出来满足一种条件的数据的问题,本质是IEnumerable和IQuerable之间的区别的更多相关文章

  1. iOS中NSNotification、delegate、KVO三者之间的区别与联系?

    前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在网上看到一个博客上详细 ...

  2. 妥协与取舍,解构C#中的小数运算

    题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激! ...

  3. 【微信小程序】 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded

    摘要: 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded 场景:最近做一个车贷计算器, 其中存在一个公式如下: /**** 总金额 * 月利率 * ( ...

  4. Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构

    一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...

  5. 深入研究js中的位运算及用法

    什么是位运算? 位运算是在数字底层(即表示数字的 32 个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序 ...

  6. 聊聊 C 语言中的 sizeof 运算

    聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...

  7. LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别

    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...

  8. Java中的递归运算

    Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...

  9. PHP中的位运算与位移运算(其它语言通用)

    /* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...

  10. 【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

    第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎 ...

随机推荐

  1. CISCN2021-第十四届全国大学生信息安全竞赛-WriteUp

    WriteUp - Maple_root -CISCN2021 总结 总得分:3400 总排名:203 赛区排名:21 第一次认真参加正式的CTF,24+3小时的脑血栓比赛时长,收获还是很多的. 开卷 ...

  2. 明解STM32—GPIO理论基础知识篇之寄存器原理

    ​ 一.前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍.GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析:GPIO工作模式中主要介绍GPI ...

  3. it必给装机小软件附源码

    需要的包 启动之后是这个样子的 远吗如下: #authon fengimport zipfile as zfimport osimport win32apiimport win32conimport ...

  4. java.lang.OutOfMemoryError- unable to create new native thread 问题排查

    问题描述 最近连续两天大约凌晨3点,线上服务开始异常,出现OOM报错.且服务所在的物理机只能ping通,但是无法登录.报错信息如下: ERROR 04-12 03:01:43,930 [Default ...

  5. React Native 开发环境搭建——nodejs安装、yarn安装、JDK安装多个版本、安装Android Studio、配置Android SDK的环境变量

    一.React Native介绍 二.开发环境的搭建 2.1.Node.js安装 Node.js要求14版或更新 https://nodejs.org/en 查看版本: 2.2.yarn安装 Yarn ...

  6. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(14)-Charles过滤网络请求

    1.简介 在日常工作测试中,经常要抓包看请求的request,response是不是传的对,返回的字段值对不对,众多的请求中看得眼花缭乱,如何找到自己想要的请求,那么我们就需要过滤请求.Charles ...

  7. 基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux

    2023年目前要说最热的点,肯定是ChatGPT了. ChatGPT官方提供的网页版本,还有需要科*上网,很多人都会基于此进行封装. 现在是移动互联网时代,基于手机APP的需求还是很大的. 所以,今天 ...

  8. MySQL大量脏数据,如何只保留最新的一条?

    因为系统的一个Bug,导致数据库表中出现重复数据,需要做的是删除重复数据且只保留最新的一条数据. 具体场景是这样的 有张订单关联额外费用表,而且一个订单号(order_no)记录只能关联同一个费用(c ...

  9. 16-js兼容性处理

    const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...

  10. Shell脚本编程(二)

    Shell脚本编程(二) shell脚本编程中if.if else的使用以及一些常用到的操作符 if.if else使用方式:      1) if条件          if [ condition ...