使用 IEnumerable 和 IQueryable 作为 ObjectSet 类型时的差异

2023-12-26

据我了解,当我使用 LINQ 扩展方法(带有 lambda 表达式语法)时IQueryable那是在事实实例中ObjectSet它们被转换为 LINQ to SQL 查询。我的意思是这个命令

IQueryable<User> users = db.UserSet;
var users32YearsOld = users.Where(user => user.Age == 32);

完全一样

IQueryable<User> users = db.UserSet;   
var users32YearsOld = from user in users where user.Age == 32 select user;

所以他们中没有一个会访问数据库,直到他们users32YearsOld被枚举在 for 循环等中。 (希望我正确理解这一点)。

但如果我不掩盖这一点将会发生什么ObjectSet as IQueryable but as IEnumerable?所以如果它的类型是IEnumerable ?

IEnumerable<User> users = db.UserSet;
var users32YearsOld = users.Where(user => user.Age == 32);

它会立即访问数据库吗(如果是的话,那么什么时候?就在第一行还是第二行)?或者它的行为是否会像之前的命令一样,直到users32YearsOld被列举 ?如果我使用以下代替会有什么区别吗?

IEnumerable<User> users = db.UserSet;
var users32YearsOld = from user in users where user.Age == 32 select user;

谢谢


取消删除我的答案,因为我刚刚测试了它,它的工作原理与我所描述的完全一样:

由于没有枚举,上述查询都不会访问数据库。和...之间的不同IQueryable查询和IEnumerable查询是在以下情况下IQueryable过滤将在数据库服务器上执行,而在以下情况下IEnumerable所有对象都将从数据库加载到内存,并且过滤将在 .NET 代码(linq-to-objects)中完成。正如您可以想象的那样,这通常是性能杀手。

我在项目中编写了简单的测试:

[TestMethod]
public void Test()
{
    // ObjectQuery<Department> converted ot IEnumerable<Department>
    IEnumerable<Department> departmetns = CreateUnitOfWork().GetRepository<Department>().GetQuery();
    // No query execution here - Enumerable has also deffered exection
    var query = departmetns.Where(d => d.Id == 1); 
    // Queries ALL DEPARTMENTS here and executes First on the retrieved result set
    var result = departmetns.First(); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 IEnumerable 和 IQueryable 作为 ObjectSet 类型时的差异 的相关文章

  • 实体框架中的分页

    在实体框架中 使用 LINQ to Entities 数据库分页通常按以下方式完成 int totalRecords EntityContext Context UserSet Count var list EntityContext Co
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

    我正在尝试编写一个单词组合生成器 我的意思是打印 X 个字符数与 X 字符串长度的所有可能组合 首先 我需要说的是 我在 StackOverFlow 中看到了一个关于这个问题的问题 其中有很多单词生成器的答案来执行此操作 在不同的语言上 但
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • WordPress 中的相对 URL

    我总是发现在 WordPress 中令人沮丧的是 图像 文件 链接等使用绝对 URL 而不是相对 URL 插入到 WordPress 中 相对 url 对于切换域名 在 http 和 https 之间切换等更方便 今天我发现 如果您使用相对
  • 堆内存分配

    如果我在程序中使用动态分配内存malloc 但我在程序运行时不释放内存 程序终止后动态分配的内存会被释放吗 或者 如果它没有被释放 并且我一遍又一遍地执行同一个程序 它会每次分配不同的内存块吗 如果是这样 我应该如何释放该内存 注意 我能想
  • 如何在 Alamofire 中设置 requestSerializer

    我目前正在从事一个项目swift 我用了Alamofire for REST API但为了使其工作 我需要传递一个参数requestSerializer In AFNETWORKING AFHTTPRequestOperationManag
  • C++ 将字符串时间戳转换为 std::chrono::system_clock::time_point

    我正在尝试通过保留微秒精度 将以以下格式表示的字符串时间戳 28 08 2017 03 59 55 0007 转换为 std chrono system clock time point 有没有办法通过使用标准库或boost来实现这一点 谢
  • 导入 psycopg2 库未加载:libssl.1.0.0.dylib

    当我尝试运行命令时 import psycopg2 我收到错误 ImportError dlopen Users gwulfs anaconda lib python2 7 site packages psycopg2 psycopg so
  • 使用 SSH.NET 将文件从 Windows 移动到 UNIX 服务器时修改的日期时间发生变化

    我在我的 C 应用程序中使用 SSH NET 将文件从 Windows 复制到 UNIX 服务器 我有几个场景 在 UNIX 服务器目录中如果要复制的文件不存在 then 将文件复制到 UNIX 服务器时修改的日期时间将更改为复制的日期时间
  • cx_Freeze 和 Python 3.3

    因此 我有一些 Python 3 3 代码 需要在 Windows 上生成 exe 我发现唯一的方法是使用 cx Freeze 但是 我什至没有比安装更进一步 这个问题完美地描述了我的问题 除了我运行Python 3 3 并且尚未得到解答
  • Github GitIgnore 错误

    我不断收到此错误 error Your local changes to the following files would be overwritten by merge gitignore 如何让它忽略主目录中的 gitignore 文
  • python 为什么以及如何截断数值数据?

    我在这里处理两个变量 但很困惑 因为当我想将它们作为 URL 参数按原样发送时 它们的值似乎正在变化 它们失去了精度 看看我用 python 解释器重现的这个场景 gt gt gt lat 0 33245794180134 gt gt gt
  • 如何获取远程存储库中提交哈希的 git 标签?

    您可以通过执行以下操作来获取指向本地存储库中特定提交的标记 git tag points at
  • iPhone 中的 XSLT 版本

    我计划在我的 iPhone 应用程序中使用 XML XSLT iPhone 目前支持哪个版本的 XSLT 我可以使用 XSLT 2 0 还是仅使用 1 0 Using libxslt在 iPhone OS 上实际上很简单 下载libxslt
  • 1 到 10 之间的不同数字

    我想生成 0 9 范围内的 10 个不同的数字 所需的输出可能如下所示 9 0 8 6 5 3 2 4 1 7 Dim arraynum 9 As Integer Dim crmd As Boolean Dim rmd as integer
  • ReactJS 清除父组件的输入

    我正在教自己使用一个超级简单的应用程序做出反应 该应用程序要求用户输入用户界面中显示的单词 如果用户输入正确 应用程序会显示另一个单词 依此类推 我已经让它几乎可以工作了 除了一件事 正确输入一个单词后 我需要清除输入元素 我在这里看到了几
  • 谜题:找出数组中重复的元素

    数组的大小为n 除了两个元素之外 数组中的所有元素在 0 n 1 范围内都是不同的 以恒定的时间复杂度 无需使用额外的临时数组即可找出重复的元素 我尝试过像这样使用 o n a 1 0 0 2 3 b 1 1 1 1 1 i 0 int r
  • 删除 AngularJS 中的查询字符串

    例如 从 URL 读取并处理查询字符串值后 http myurl com foo baa 我可以将网址更改为 http myurl com foo by using location search myQueryStringParamete
  • Powershell 使用嵌套引号调用 msbuild

    使用 Powershell 和 Psake 为 Visual Studio 解决方案创建包和部署 尝试使用 msbuild 部署数据库项目 使用 msdos Visual Studio 命令行可以正常工作 msbuild target De
  • UI-Router:我可以始终使用相同的控制器吗?

    我正在使用 UI Router 在我的应用程序中添加一些 菜 单 stateProvider state list url Focales templateUrl demo focals html controller FocalCtrl
  • python 的 sum() 和非整数值

    有没有一种简单快捷的方法将 sum 与非整数值一起使用 所以我可以这样使用它 class Foo object def init self bar self bar bar mylist Foo 3 Foo 34 Foo 63 200 re
  • 警告:左移计数 >= 类型宽度

    我对处理位非常陌生 并且在编译时遇到以下警告 7 warning left shift count gt width of type 我的7号线是这样的 unsigned long int x 1 lt lt 32 如果大小是有意义的lon
  • 使用 IEnumerable 和 IQueryable 作为 ObjectSet 类型时的差异

    据我了解 当我使用 LINQ 扩展方法 带有 lambda 表达式语法 时IQueryable那是在事实实例中ObjectSet它们被转换为 LINQ to SQL 查询 我的意思是这个命令 IQueryable