【问题标题】:What is the difference between a LINQ subquery and a nested FROM statement [closed]LINQ 子查询和嵌套的 FROM 语句有什么区别[关闭]
【发布时间】:2012-10-23 17:59:50
【问题描述】:

1) 子查询是查询中的查询,因此必须以 FROM 子句开始,以 SELECT 或 GROUP BY 子句结束。但我很困惑为什么我们不将那些只有 FROM 子句的嵌套语句也视为子查询(因此它们不以 SELECT 或 GROUP BY 结尾)。

from c_2 in collection_2 的行为与子查询的行为非常相似,因为它为每个 c_1 元素枚举整个 collection_2。由于它们的行为非常相似,为什么不将诸如 from c_2 in collection_2 之类的语句也视为子查询(您可以争辩说子查询返回结果,但同样的论点也可以用于 from c_2 in collection_2,因为它确实被转换为打电话给SelectMany)?

    var query = from c_1  in collection_1
                from c_2  in collection_2 
                select ...

谢谢

【问题讨论】:

  • 当末尾只有一个select 子句时,您认为哪一部分是子查询?
  • @Servy - 我们通常不会在此网站上回答家庭作业问题,而是提供有关如何找到答案的指导。
  • @Tejs - 不,这不是家庭作业。请详细说明为什么您认为这是一项家庭作业
  • @Jon Skeet:我从未暗示此代码包含子查询(即嵌套查询以 from 子句开头并以 select 子句结尾)
  • @user1483278:您当然暗示了这一点:“但我很困惑,为什么我们不将那些只有 FROM 子句的嵌套语句也视为子查询”。如果您针对一种情况提出问题,然后给出一些示例代码,那么肯定暗示该代码是您问题的示例。

标签: c# linq linq-to-objects


【解决方案1】:

但同样的论点也可以从 collection_2 中的 c_2 说起,因为它确实被转换为对 SelectMany 的调用

不是真的。那个电话不会被转换成SelectMany。事实上,有两个from 子句组合在一起(只有一个select)导致它被转换为SelectMany 调用,所以在这种情况下整个事情都是一个查询。如果每个 from 与单个 select 匹配,那么它将是一个子查询。

【讨论】:

  • 所以区别在于那段代码本身是否可以自己产生结果(“from c_2 in collection_2”不能)?
  • @user1483278 基本上,是的。请注意,子查询可能使用或不使用外部查询中的项目,这意味着它可以被评估一次然后重新使用,或者可能需要为外部查询中的每个项目重新评估。这两种情况仍然是“子查询”。
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2014-05-26
  • 1970-01-01
相关资源
最近更新 更多