使用扩展方法表示的嵌套“from”LINQ 查询

2023-12-09

如何使用扩展方法语法编写此 LINQ 查询?

var query = from a in sequenceA
            from b in sequenceB
            select ...; 

为了供您将来参考,此表格的所有问题均由 C# 规范第 7.16 节解答。

本段回答了您的具体问题:


带有第二个的查询表达式from子句后跟一个select clause

from x1 in e1
from x2 in e2
select v

被翻译成

( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )

所以你的查询:

var query = from a in sequenceA            
            from b in sequenceB
            select ...;  

是相同的

var query =  ( sequenceA ) . SelectMany( a => sequenceB , ( a , b ) => ... )

(请注意,当然,这假设“...”是一个表达式,而不是后跟查询继续的表达式。)

hdv 的回答指出

var query =  ( sequenceA ) . SelectMany( 
    a => ( sequenceB ) . Select( b => ... ) );

也将是一个逻辑上有效的翻译,尽管这不是我们实际执行的翻译。在 LINQ 实现的早期,这是我们选择的翻译。然而,当你堆积更多from子句,它使 lambda 嵌套得越来越深,然后向编译器提供一个enormous类型推断中的问题。这种翻译选择会破坏编译器性能,因此我们引入了透明标识符机制为我们提供了一种更便宜的方式来表示深度嵌套范围的语义。

如果您对这些主题感兴趣:

有关为什么深度嵌套 lambda 给编译器带来难题的更多想法,请参阅:

http://blogs.msdn.com/b/ericlippert/archive/2007/03/26/lambda-expressions-vs-anonymous-methods-part-four.aspx

http://blogs.msdn.com/b/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part- Five.aspx

有关透明标识符的更多信息,请参阅 Wes Dyer 的这篇文章,他在 C# 3.0 中实现了透明标识符:

http://blogs.msdn.com/b/wesdyer/archive/2006/12/22/transparent-identifiers.aspx

以及我关于它们的系列文章:

http://ericlippert.com/2014/07/31/transparent-identifiers-part-one/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用扩展方法表示的嵌套“from”LINQ 查询 的相关文章

  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • noSelectionOption 属性[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 我遇到了noSelectionOptionJSF 2 0 中的属性 我不明白这个属性的目的 根据描述 它在需要选择并且用户选择时使用noSelectionOption导致验证错误 So if
  • 在字母表列表中查找缺失的字母

    我正在尝试解决以下问题 在传递的字母范围中找到丢失的字母并将其返回 如果所有字母都出现在该范围内 则返回 undefined 我将得到的字符串输入是 abce 应返回 d bcd 应该返回未定义 abcdefghjklmno 应该返回 i
  • 如何使用 MEF 获取 Visual Studio 扩展中的当前 ActiveDocument?

    我正在使用 MEF 开发 Visual Studio 2013 扩展 同时尝试读取 Active Document 内容类型和代码 目前 它仅在编辑器中打开文档 项目项时读取 一旦打开它们 每当我们在打开的文档选项卡之间切换时 它就不会再次
  • 根据路线删除@include

    我有一个菜单部分 其中包括一个输入搜索栏 但我不希望搜索栏在所有页面上都可见 而仅针对两个特定的 uri 有没有办法去除刀片中包含的内容 目前它看起来像这样 a href all a a href nes a a href snes a i
  • $在mongodb中过滤最多2个嵌套级别

    我有一个结构如下的数据库 Hospitais utis id 893910 nome UTI1 leitos id 128938120 paciente Oliver id 12803918239 paciente Priscilla
  • 满足条件时终止多处理进程

    我试图运行的想法是这样的 RUN 3 进程进行计算 一旦 3 个进程之一完成任务 立即杀死其他人并继续主要任务 我不能让它再运行下去 我尝试过的事情是 将全局变量放入 multiprocessing manager 但这仍然可以让进程完成循
  • Python pyodbc 使用 SQL Server 身份验证连接到 Sql Server

    窗口用户详细信息与我登录的Sql Server用户不同 因此我尝试使用用户名 Admin JJack 和密码使用pyodbc连接到数据库 但是窗口用户 Jack 的连接显示失败 我不知道哪里出了问题 我的连接字符串 connection p
  • 作为特定用户对 TFS 工作项进行更改

    我正在创建一个 Web 应用程序 我的团队中的用户将使用它 对 TFS 工作项进行更改 我正在为此使用 TFS API 为了访问 TFS 服务器 我在 Web 应用程序中使用了我的凭据 现在 每次有人使用该应用程序并对 TFS 工作项进行更
  • 根据列数据创建新的 Excel 行

    大家下午好 我遇到一个问题 我的用户拥有多个银行帐户详细信息 我需要尝试为每个拥有多个银行帐户的员工创建一个新行 并为第二个银行帐户分配一个新行 Employee Number User ID BSB Account number 1000
  • 使用 Airflow 运行 .EXE 和 Powershell 任务

    我们的系统基本上只是运行 C 和 Powershell 应用程序以及 MS SQL Server 的 Windows 服务器 我们有一个内部工作流程管理解决方案 能够运行执行 EXE BAT PS1 甚至调用 DLL 函数的任务 现在我正在
  • 重定向到 Amazon S3 静态网站中的错误页面

    我有一个存储桶并在其中启用了静态网站托管 假设我的存储桶中只有两个文件 index html 和 error html 如果使用 test html 命中请求 则会抛出访问被拒绝或不会抛出此类关键错误 如果出现此类错误 如何重定向到 err
  • 使用保留字作为属性名称,重新审视

    保留字可以用作对象的属性名称吗 这个问题是在之前的 Stack Overflow 问题中间接提出的 浏览器支持在 JavaScript 中使用保留字作为属性名称 答案似乎是普遍共识亚历克斯 韦恩 您可以使用这些单词 但只能作为字符串而不是速
  • 未来不完整?

    object Executor extends App implicit val system ActorSystem implicit val materializer ActorMaterializer implicit val ec
  • RDD 转换和操作只能由驱动程序调用

    Error org apache spark SparkException RDD 转换和操作只能由驱动程序调用 不能在其他转换内部调用 例如 rdd1 map x gt rdd2 values count x 无效 因为值转换和计数操作无
  • TFS 排除目录 - .tfignore 不起作用,它是一个非常大的目录

    我看过其他帖子并在 stackoverflow 上阅读它们 如何忽略 TFS 中的文件 目录以避免它们进入中央源存储库 然而这似乎不起作用 我有一个名为 FS 的根文件夹 在该目录中我有以下 tfignore This tfignore f
  • Oracle 10g 按日期选择查询没有返回结果

    我有一些令人困惑的问题 SQL gt select login status date modified from users where login zack 661 and date modified 05 MAR 14 no rows
  • Javascript stringify '%%' 丢失百分号

    为什么 stringify 的输出缺少百分号 var a dp var t JSON stringify a console log t t 结果是 t dp 为什么没有结果 t dp Thanks 正如文档中所指定的console log
  • 导入错误:“没有名为模块”*确实*存在[重复]

    这个问题在这里已经有答案了 当我启动金字塔保存时 我得到这个堆栈跟踪 python which pserve etc development ini Traceback most recent call last File home hug
  • 如何从 api 获取整个 Facebook 好友列表

    有没有办法使用 api 获取整个 Facebook 好友列表 我尝试了很多事情 这是我的镜头 FacebookClient f new FacebookClient access token f IsSecureConnection tru
  • 使用扩展方法表示的嵌套“from”LINQ 查询

    如何使用扩展方法语法编写此 LINQ 查询 var query from a in sequenceA from b in sequenceB select 为了供您将来参考 此表格的所有问题均由 C 规范第 7 16 节解答 本段回答了您